<?php

// Initialisations
$libelle_index_education_eps='ED.PHYSIQUE & SPORT.';
$lieu_generique_eps="__eq sport";
$ecart_visu_eleve=3600*24*7*3;
// Categorie id pour les groupes de localisation eps
$categorie_id_spe=7;
// Categorie id pour les autres groupes de localisation
$categorie_id_loc_etab=6;
// Le créneau horaire dans edt_ics commence après, avec un décalage de "decalage_debut" par rapport à la réalité
$decalage_debut=180;
// Le créneau horaire dans edt_ics se termine  avant, avec un décalage de "decalage_fin" par rapport à la réalité
$decalage_fin=-120;
// On considère que les groupes ont la même categorie_id dans jgc quelle que soit la classe; de toute façon on le teste


// Passer à y pour afficher des infos de debugage
$debug_edt="n";

// Pouvoir régler l'opacité des couleurs de cours
$opacity_couleur=0.5;

// Pouvoir régler l'opacité des carrés de la légende
$opacity_couleur_carre=1.0;

// Modif _16 du 20160825 par P.Aldebert : se recadrer sur l'horaire quotidien, pour l'horaire normal
// Modif _15 du 20160424 par P.Aldebert : le tableau est mis à l'extérieur du programme
// Modif _15 du 20160124 par P.Aldebert : tableau rétablissant les vraies heures
$wz = array();

// Pour les heures de début, horaire normal
$wz['08:43']='08:40';
$wz['09:38']='09:35';
$wz['10:48']='10:45';
$wz['11:43']='11:40';
$wz['12:38']='12:35';
$wz['13:43']='13:40';
$wz['14:38']='14:35';
$wz['15:33']='15:30';
//$wz['16:38']='16:35';
//$wz['17:33']='17:30';
$wz['16:28']='16:25';
$wz['17:23']='17:20';

// Pour les heures de début decalées d'une demie-heure
$wz['09:08']='09:10';
$wz['10:03']='10:05';
$wz['11:13']='11:15';
$wz['12:08']='12:10';
$wz['13:03']='13:05';
$wz['14:08']='14:10';
$wz['15:03']='15:05';
// Modif _16 du 20160825 par P.Aldebert : pour 2SIA en 16_17
$wz['15:23']='15:05';
// Fin modif
$wz['15:58']='16:00';
$wz['16:53']='16:55';

// Pour les heures de fin, horaire normal	
$wz['09:33']='09:35';
$wz['10:28']='10:30';
$wz['11:38']='11:40';
$wz['12:33']='12:35';
$wz['13:28']='13:30';
$wz['14:03']='14:05';
$wz['14:23']='14:35'; // Fin de cours double enjambant une récré
$wz['14:33']='14:35';
$wz['15:28']='15:30';
$wz['16:23']='16:25';
//$wz['17:28']='17:30';
//$wz['18:18']='18:20';
$wz['17:18']='17:20';
$wz['18:08']='18:10';

// Pour les heures de fin decalées d'une demie-heure
$wz['10:08']='10:05';
$wz['11:18']='11:15';
$wz['12:13']='12:10';
$wz['13:08']='13:05';
$wz['13:58']='13:55';
$wz['14:13']='14:10';
$wz['14:58']='14:55';
$wz['15:08']='15:05';
$wz['16:03']='16:00';
$wz['16:58']='16:55';
$wz['17:48']='17:45';
// Modif _16 du 20161008 par P.Aldebert : dans les fichiers ics de 2016-17, pour la 2SIA:
// - la limite entre H5,5 et H6,5 est 14:00
// - la limite entre H6,5 et H7,5 est 15:00
$wz['13:58']='14:00';
$wz['14:03']='14:00';
$wz['14:58']='15:00';
$wz['15:03']='15:00';
// Fin modif
// Modif _16 du 20161009 par P.Aldebert : dans les fichiers ics de 2016-17, pour la 6A (V. Vallet)
$wz['12:03']='12:00';
// Fin modif
	
// Modif _15 du 20160424 par P.Aldebert : création du tableau $st_wert
$st_wert=array();
// Modif _16 du 20161009 par P. Aldebert : pour la demie-heure prestée par V. Vallet en 6A en 2016-17
$st_wert['1800']=0.5;
// Fin modif
$st_wert['2700']=1.;
$st_wert['3000']=1.;
$st_wert['3600']=1.;
// Théoriquement, la H2,5 dure elle aussi, après abattement, 3900 secondes
// Mais on considère que l'administration ne prendra jamais cette orientation
// Donc on considère que c'est un cours de 16:35 à 17:45
$st_wert['3900']=1.5;
$st_wert['4500']=1.5;
$st_wert['4800']=1.5;
$st_wert['5100']=1.5;
$st_wert['5400']=1.5;
$st_wert['5700']=1.5;
$st_wert['6000']=2.;
$st_wert['6300']=2.;
$st_wert['6900']=2.;
$st_wert['7200']=2.;
// Pour la journée
// Modif _16 du 20161009 par P. Aldebert : la journée finit à 18:10 et non plus à 18:20
//$st_wert['34500']=10.;
$st_wert['33900']=10.;
// Fin modifs

$tab_couleur_edt[1]="blue";
$tab_couleur_edt[2]="fuchsia";
$tab_couleur_edt[3]="lime";
$tab_couleur_edt[4]="maroon";
$tab_couleur_edt[5]="purple";
$tab_couleur_edt[6]="red";
$tab_couleur_edt[7]="white";
$tab_couleur_edt[8]="yellow";
$tab_couleur_edt[9]="aqua";
$tab_couleur_edt[10]="grey";
$tab_couleur_edt[11]="green";
$tab_couleur_edt[12]="olive";
$tab_couleur_edt[13]="teal";
$tab_couleur_edt[14]="#799C13";
$tab_couleur_edt[15]="#4BA829";
$tab_couleur_edt[16]="#D4D600";
$tab_couleur_edt[17]="#FFEC00";
$tab_couleur_edt[18]="#FCC300";
$tab_couleur_edt[19]="#DBAA73";
$tab_couleur_edt[20]="#745A32";
$tab_couleur_edt[21]="#E95D0F";
$tab_couleur_edt[22]="#99141B";
$tab_couleur_edt[23]="#009EE0";
$tab_couleur_edt[24]="#C19CC4";
// Les couleurs sont dans l'EDT classique Gepi définies dans templates/DefaultEDT/css/style_edt.css avec des .cadreCouleur1, .cadreCouleur2,...

/*
// Couleurs pour les onglets dans visu_eleve.inc.php:
$tab_couleur_onglet['eleve']="moccasin";
$tab_couleur_onglet['responsables']="mintcream";
$tab_couleur_onglet['enseignements']="whitesmoke";
$tab_couleur_onglet['bulletins']="lightyellow";
$tab_couleur_onglet['bulletin']="lemonchiffon";
$tab_couleur_onglet['releves']="papayawhip";
$tab_couleur_onglet['releve']="seashell";
$tab_couleur_onglet['cdt']="linen";
$tab_couleur_onglet['anna']="blanchedalmond";
$tab_couleur_onglet['absences']="azure";
$tab_couleur_onglet['discipline']="salmon";
$tab_couleur_onglet['fp']="linen";
*/

$tab_couleur_onglet['releves']="papayawhip";
$tab_couleur_onglet['releve']="seashell";
$tab_couleur_onglet['cdt']="linen";
$tab_couleur_onglet['absences']="azure";
$tab_couleur_onglet['discipline']="salmon";

$tab_couleur_onglet['edt']="moccasin";
$tab_couleur_onglet['indication']="linen";

// Modif _16 du 20161109 par P. Aldebert : apparition du code 'o' pour les cours supplémentaire d'opportunité
// Modif _16 du 20161011 par P.Aldebert : apparition des codes b,q,f qui montrent que les élèves sont libres
// Modif _15 du 20160602 : rajout des enseignements non assurés (ena), identifiant 'e'
// Couleurs liées aux évènements: tout ce qui libère les élèves se rapproche du vert
$bv=array();
// Cours courant, sans événement
$bv['n']='azure';
// Cours dont le nombre d'élèves est imprévisible
$bv['i']='yellow';
// Cours supplémentaire d'opportunité
$bv['o']='red';
// Absence
//$bv['a']='red';
$bv['a']='forestgreen';
// Conférence
$bv['c']='deepskyblue';
$bv['k']='dodgerblue';
$bv['q']='mediumseagreen';
// Sortie
$bv['s']='fuchsia';
$bv['z']='mediumvioletred';
$bv['b']='greenyellow';
// Voyage
$bv['v']='goldenrod';
// Modif _15 du 20160606 par P.Aldebert : suite à réunion avec M.Seddiki
//$bv['w']='lightgrey';
//$bv['w']='darkslateblue';
// Fin modif
//$bv['w']='gold'; pour réserver l'or
$bv['w']='sienna';
$bv['f']='chartreuse';
// Bloc de cours non assurés; périodes spéciales
//$bv['e']='green'; // Pour distinguer des périodes libres
$bv['e']='black';
// 
$bv['r']='lavenderblush';
// Modif _15 du 20160606 par P.Aldebert : suite à réunion avec M.Seddiki
//$bv['w']='lightgrey';
//$bv['w']='darkslateblue';
// Fin modif

// Texte liés aux évènements
$txx=array();
// Cours supplémentaire d'opportunité
$txx['o']='Remplacé par: ';
// Absence
//$txx['a']='Supprimé à cause de: ';
$txx['a']='Libéré à cause de: ';
// Conférence
$txx['c']='Impacté par: ';
$txx['k']='Impacté par: ';
$txx['q']='Libéré par: ';
// Sortie
$txx['s']='Impacté par: ';
$txx['z']='Impacté par: ';
$txx['b']='Libéré par: ';
// Voyage
$txx['v']='Impacté par: ';
$txx['w']='Impacté par: ';
$txx['f']='Libéré par: ';
// Bloc de cours non assurés
$txx['e']='Supprimé à cause de: ';

// Mot de liaison liées aux évènements
$lie=array();
// Absence
$lie['a']=' de ';
// Cours supplémentaire d'opportunité
$lie['o']=' organisé(e) par : ';
// Conférence
$lie['c']=' organisé(e) par ';
$lie['k']=' organisé(e) par ';
$lie['q']=' organisé(e) par ';
// Sortie
$lie['s']=' organisé(e) par ';
$lie['z']=' organisé(e) par ';
$lie['b']=' organisé(e) par ';
// Voyage
$lie['v']=' organisé(e) par ';
$lie['w']=' organisé(e) par ';
$lie['f']=' organisé(e) par ';
// Bloc de cours non assurés
$lie['e']=' organisé(e) par ';
// Fin modif adjonction de nouveaux codes d'événement

//function affiche_edt_ics($num_semaine_annee, $type_edt, $id_classe="", $login_prof="") {
// Modif _15 du 20160509 par P.Aldebert : ajout de la possibilité d'un emploi du temps d'élève
function affiche_edt_ics($weise, $num_semaine_annee, $type_edt, $id_classe="", $login_prof="", $login_ele="", $largeur_edt=800, $x0=50, $y0=60, $hauteur_une_heure=60, $hauteur_titre=10, $hauteur_entete=40) {
	global $debug_edt, $opacity_couleur, $opacity_couleur_carre;
	global $ecart_visu_eleve;
	global $mode_infobulle;
	global $tab_coord_prises;
	// Modif _15 du 20160424 par P.Aldebert : le tableau $wz rétablissant les vraies heures est mis à l'extérieur	
	global $wz;
	// Modif _16 du 20160922 par P.Aldebert : ajout de variable initialisée de façon commune
	global $libelle_index_education_eps;
	// Modif _16 du 20161118 : un seul endroit pour la référence des couleurs
	global $bv;

	$tab_coord_prises=array();
	
	
	if($opacity_couleur=="") {
		$opacity_couleur=0.5;
	}

	$html="";

	$tab=explode("|", $num_semaine_annee);

	$num_semaine=$tab[0];
	$annee=$tab[1];

	$_SESSION['edt_ics_num_semaine']=$num_semaine;
	$_SESSION['edt_ics_annee']=$annee;

	$jours=get_days_from_week_number($num_semaine, $annee);

	if($type_edt=="classe") {
		$_SESSION['edt_ics_id_classe']=$id_classe;

		$titre_edt="EDT de ".get_nom_classe($id_classe);
		$param_lien_edt="type_edt=classe&amp;id_classe=$id_classe";

		$sql_lien_semaine_precedente="SELECT num_semaine FROM edt_ics WHERE id_classe='$id_classe' AND num_semaine!='$num_semaine' AND date_debut<'".strftime("%Y-%m-%d %H:%M:%S", $jours['num_jour'][1]['timestamp'])."' ORDER BY date_debut DESC LIMIT 1;";

		$sql_lien_semaine_suivante="SELECT num_semaine FROM edt_ics WHERE id_classe='$id_classe' AND num_semaine!='$num_semaine' AND date_debut>'".strftime("%Y-%m-%d %H:%M:%S", $jours['num_jour'][7]['timestamp'])."' ORDER BY date_debut ASC LIMIT 1";

		// Modif _16 du 20161214 par P.Aldebert : pour pouvoir ordonner quand il y a des pavés juxtaposés
		//$sql_cours_de_la_semaine="SELECT * FROM edt_ics WHERE id_classe='$id_classe' AND num_semaine='$num_semaine' ORDER BY date_debut;";
		$sql_cours_de_la_semaine="SELECT * FROM edt_ics WHERE id_classe='$id_classe' AND num_semaine='$num_semaine' ORDER BY date_debut, matiere_ics, prof_ics;";
		// Din modif
	}
	elseif($type_edt=="prof") {
		$_SESSION['edt_ics_login_prof']=$login_prof;

		// Désignation du prof à changer:
		$titre_edt="EDT de ".civ_nom_prenom($login_prof);
		$param_lien_edt="type_edt=prof&amp;login_prof=$login_prof";

		$sql_lien_semaine_precedente="SELECT num_semaine FROM edt_ics ei, edt_ics_prof eip WHERE ei.prof_ics=eip.prof_ics AND eip.login_prof='$login_prof' AND num_semaine!='$num_semaine' AND date_debut<'".strftime("%Y-%m-%d %H:%M:%S", $jours['num_jour'][1]['timestamp'])."' ORDER BY date_debut DESC LIMIT 1;";

		$sql_lien_semaine_suivante="SELECT num_semaine FROM edt_ics ei, edt_ics_prof eip WHERE ei.prof_ics=eip.prof_ics AND eip.login_prof='$login_prof' AND num_semaine!='$num_semaine' AND date_debut>'".strftime("%Y-%m-%d %H:%M:%S", $jours['num_jour'][7]['timestamp'])."' ORDER BY date_debut ASC LIMIT 1";

		$sql_cours_de_la_semaine="SELECT ei.* FROM edt_ics ei, edt_ics_prof eip WHERE ei.prof_ics=eip.prof_ics AND eip.login_prof='$login_prof' AND num_semaine='$num_semaine' ORDER BY date_debut;";
	}
	// Modif _15 du 20160509 par P.Aldebert : ajout pour l'emploi du temps d'élève
	elseif($type_edt=="ele") {
		$_SESSION['edt_ics_login_ele']=$login_ele;

		// Désignation de l'élève à changer:
		$titre_edt="EDT de ".get_nom_prenom_eleve($login_ele,'avec_classe');
		$param_lien_edt="type_edt=ele&amp;login_ele=$login_ele";
		
		// Préparatifs : 
		// num_semaine doit déterminer le trimestre
		// Trouver une date début pour se caler
		$skl="SELECT date_debut FROM edt_ics WHERE num_semaine ='".$num_semaine."' ORDER BY date_debut ASC LIMIT 1";
		$exek=sql_query($skl);
		if (!$exek) {die("Erreur à l'exécution de : ".$skl);}
		if (mysqli_num_rows($exek)!=1) {die("Erreur de nombre pour : ".$skl);}
		$date_debut_lauf=old_mysql_result($exek,0,'date_debut');
		// Identifier le dernier id_classe
		$id_classe=get_id_classe_derniere_classe_ele($login_ele);
		//var_dump($id_classe);
		include("../lib/periodes.inc.php");
		// Pour les terminales franco-allemandes, on a pris la précaution de mettre la fin du deuxième trimestre à la fermeture de juillet
		// Chercher le num periode officiel pour cette date_debut
		$k=1;
		while ($date_fin_periode[$k]<=$date_debut_lauf) {
			$k++;
		}
		$zz=$k;

		// Modif _16 du 20161029 par P.Aldebert : utiliser la classe plutôt que les groupes pour situer les semaines
		/*
		$sql_lien_semaine_precedente="SELECT num_semaine 
		FROM edt_ics ei, j_eleves_groupes jeg 
		WHERE ei.id_groupe=jeg.id_groupe 
		AND jeg.periode ='".$zz."' 
		AND jeg.login='$login_ele' 
		AND num_semaine!='$num_semaine' AND date_debut<'".strftime("%Y-%m-%d %H:%M:%S", $jours['num_jour'][1]['timestamp'])."' ORDER BY date_debut DESC LIMIT 1;";
		*/
		$sql_lien_semaine_precedente="SELECT num_semaine 
		FROM edt_ics ei, j_eleves_classes jec 
		WHERE ei.id_classe=jec.id_classe 
		AND jec.periode ='".$zz."' 
		AND jec.login='$login_ele' 
		AND num_semaine!='$num_semaine' AND date_debut<'".strftime("%Y-%m-%d %H:%M:%S", $jours['num_jour'][1]['timestamp'])."' ORDER BY date_debut DESC LIMIT 1;";

		$sql_lien_semaine_suivante="SELECT num_semaine 
		FROM edt_ics ei, j_eleves_groupes jeg 
		WHERE ei.id_groupe=jeg.id_groupe 
		AND jeg.periode ='".$zz."' 
		AND jeg.login='$login_ele' 
		AND num_semaine!='$num_semaine' AND date_debut>'".strftime("%Y-%m-%d %H:%M:%S", $jours['num_jour'][7]['timestamp'])."' ORDER BY date_debut ASC LIMIT 1";
		
		// Modif _17 du 20171009 par P. Aldebert : le jeg.periode pose problème quand les élèves changent de classe : on va donc remettre zz, mais,
		// pour ne pas créer de trouble, on va artificiellement rendre les élèves présents dans les groupes basculants pendant les 3 trimestres.
		// Il n'est pas utile de rajouter un tri par le champ classe_ics, pour qu'un professeur n'assurant pas son cours
		// n'apparaisse pas si le service est partagé: cette précaution est prise plus loin, dans le choix de la variable $loop
		// Modif _16 du 20161029 par P.Aldebert : se concentrer sur les instances de cours, donc filtrer par la classe à laquelle appartient l'élève
		// De plus on peut mettre le jeg.periode à '1': seulement peut-être un risque pour les élèves qui changent de classe.
		// Modif _16 du 20160914 par P. Aldebert : anticipation: les deux unions devraient rapidement disparaître
		// Fabriquer la requête avec une UNION
		/*
		$sql_cours_de_la_semaine=" (SELECT DISTINCT ei.* 
		FROM edt_ics ei, j_eleves_groupes jeg, j_eleves_classes jec
		WHERE (ei.id_groupe=jeg.id_groupe 
		AND jeg.periode ='1' 
		AND jeg.login='$login_ele' 
		AND ei.id_classe = jec.id_classe 
		AND jec.login='$login_ele' 
		AND num_semaine='$num_semaine') ORDER BY date_debut)";
		*/
		$sql_cours_de_la_semaine=" (SELECT DISTINCT ei.* 
		FROM edt_ics ei, j_eleves_groupes jeg, j_eleves_classes jec
		WHERE (ei.id_groupe=jeg.id_groupe 
		AND jeg.periode ='".$zz."' 
		AND jeg.login='$login_ele' 
		AND ei.id_classe = jec.id_classe 
		AND jec.login='$login_ele' 
		AND num_semaine='$num_semaine') ORDER BY date_debut)";
		
		/*
		// Rajouter le groupe 0 de la classe
		$sql_cours_de_la_semaine.=" UNION (SELECT ei.* 
		FROM edt_ics ei, j_eleves_classes jec
		WHERE (ei.id_groupe='0' 
		AND ei.id_classe=jec.id_classe 
		AND jec.periode='".$zz."' 
		AND jec.login='$login_ele' 
		AND num_semaine='$num_semaine') ORDER BY date_debut)";
		
		// Modif _15 du 20160510 par P.Aldebert : rajouter les groupes à participation inconnue (sans élèves) et présents à l'emploi du temps
		// ACHTUNG : ne pas rajouter si l'élève est déjà en cours à ce moment-là
		// Rechercher les groupes de la classe où était l'élève ce trimestre-là
		$sql="SELECT DISTINCT jgc.id_groupe FROM j_groupes_classes jgc, j_eleves_classes jec
		WHERE jgc.id_classe=jec.id_classe 
		AND jec.periode='".$zz."' 
		AND jec.login='$login_ele' 
		ORDER BY id_groupe";
		$exec=sql_query($sql);
		if (!$exec) {die("Erreur à l'exécution de : ".$sql);}
		$nb_groupes=mysqli_num_rows($exec);
		unset ($tab_schar);
		$tab_schar=array();
		for ($i=0;$i<$nb_groupes;$i++) {
			$id_schar=old_mysql_result($exec,$i,'id_groupe');
			if(!are_pupils($id_schar)) {
				$tab_schar[]=$id_schar;
			}
		}
		if (count($tab_schar)>0) {
			$liste_schar="(";
			for ($j=0;$j<count($tab_schar);$j++) {
				$liste_schar.=$tab_schar[$j].",";
			}
			// Oter la dernière virgule
			$liste_schar=substr($liste_schar,0,strlen($liste_schar)-1);
			// Rajouter la parenthèse fermante
			$liste_schar.=")";
			// Compléter la requête
			$sql_cours_de_la_semaine.=" UNION (SELECT ei.* 
			FROM edt_ics ei, j_eleves_classes jec
			WHERE (ei.id_classe=jec.id_classe 
			AND jec.periode='".$zz."' 
			AND jec.login='$login_ele' 
			AND num_semaine='$num_semaine'
			AND ei.id_groupe IN ".$liste_schar." ) ORDER BY date_debut)";
		}
		*/
		// Fin modif
	}
	

	//$html.="<h2>".$titre_edt."</h2>";

	$lien_semaine_prec="";
	//$html.="$sql_lien_semaine_precedente<br />";
	$res=mysqli_query($GLOBALS["mysqli"], $sql_lien_semaine_precedente);
	// Modif _16 du 20161119 par P. Aldebert : le système par fleche est fermé aux élèves et aux parents
	//if(mysqli_num_rows($res)>0) {
	if((mysqli_num_rows($res)>0)&&(in_array($_SESSION['statut'], array('administrateur', 'scolarite', 'cpe', 'professeur')))) {
	// Fin modif
		$lig=mysqli_fetch_object($res);
		$annee_b=$annee;
		if($lig->num_semaine>$num_semaine) {
			$annee_b=$annee-1;
		}
		$lien_semaine_prec="<a href='".$_SERVER['PHP_SELF']."?$param_lien_edt&amp;num_semaine_annee=".$lig->num_semaine."|$annee_b&amp;mode=afficher_edt' title=\"Semaine précédente\"";
		if($mode_infobulle=="y") {
			$lien_semaine_prec.=" onclick=\"edt_semaine_suivante('$lig->num_semaine', '$annee_b', '$id_classe', '$login_prof'); return false;\"";
		}
		$lien_semaine_prec.="><img src='../images/arrow_left.png' class='icone16' alt='Semaine précédente'></a> - ";
	}

	$lien_semaine_suiv="";
	//$html.="$sql_lien_semaine_suivante<br />";
	$res=mysqli_query($GLOBALS["mysqli"], $sql_lien_semaine_suivante);
	// Modif _16 du 20161119 par P. Aldebert : le système par fleche est fermé aux élèves et aux parents
	//if(mysqli_num_rows($res)>0) {
	if((mysqli_num_rows($res)>0)&&(in_array($_SESSION['statut'], array('administrateur', 'scolarite', 'cpe', 'professeur')))) {
	// Fin modif
		$lig=mysqli_fetch_object($res);
		$annee_b=$annee;
		if($lig->num_semaine<$num_semaine) {
			$annee_b=$annee+1;
		}
		$lien_semaine_suiv=" - <a href='".$_SERVER['PHP_SELF']."?$param_lien_edt&amp;num_semaine_annee=".$lig->num_semaine."|$annee_b&amp;mode=afficher_edt' title=\"Semaine suivante\"";
		if($mode_infobulle=="y") {
			$lien_semaine_suiv.=" onclick=\"edt_semaine_suivante('$lig->num_semaine', '$annee_b', '$id_classe', '$login_prof'); return false;\"";
		}
		$lien_semaine_suiv.="><img src='../images/arrow_right.png' class='icone16' alt='Semaine suivante'></a>";
	}

	//$html.="<h3>".$lien_semaine_prec."Semaine $num_semaine (".$jours['num_jour'][1]['jjmmaaaa']." - ".$jours['num_jour'][7]['jjmmaaaa'].")".$lien_semaine_suiv."</h3>";

	//$html.="$sql_cours_de_la_semaine<br />";
	$res_cours_de_la_semaine=mysqli_query($GLOBALS["mysqli"], $sql_cours_de_la_semaine);
	if(mysqli_num_rows($res_cours_de_la_semaine)==0) {
		// Modif _16 du 20161129 par P.Aldebert : modif mot à mot
		//$html.="<p>Aucun EDT n'est enregistré.</p>";
		$html.="<p>Aucun EDT pour la classe de cet(te) élève n'est enregistré à ce jour.</p>";
		// Fin modif
	}
	else {
		$chaine_alea=remplace_accents(rand(1, 1000000)."_".microtime(),"all");

		$html.="<script type='text/javascript'>
	//alert('plop');
	function edt_semaine_suivante(num_semaine, annee, id_classe, login_prof) {
		new Ajax.Updater($('div_edt_".$chaine_alea."'),'../edt/index.php?num_semaine_annee='+num_semaine+'|'+annee+'&id_classe='+id_classe+'&login_prof='+login_prof+'&type_edt=$type_edt&mode=afficher_edt_js',{method: 'get'});
	}
</script>

<div id='div_edt_".$chaine_alea."'>";

		if($debug_edt=="y") {
			echo "<pre>";
			print_r($jours);
			echo "</pre>";
		}

		// L'exclusion ne fonctionne que si toutes les matières des ICS ont bien été associées à des matières Gepi.
		// Cette exclusion ne permet pas pour autant de distinguer à quel groupe de telle matière correspond une entrée dans edt_ics
		$tab_matieres_eleve=array();
		$tab_id_cours_exclu=array();
		// Modif _15 du 20160509 par P.Aldebert : les matières exclues ne semblent plus intéressantes car l'élève dispose d'un EDT perso
		/*
		if($_SESSION['statut']=='eleve') {
			$sql_matieres_eleve="SELECT DISTINCT jgm.id_matiere FROM j_eleves_groupes jeg, j_groupes_matieres jgm WHERE jeg.id_groupe=jgm.id_groupe AND jeg.login='".$_SESSION['login']."';";
			//$html.="$sql_matieres_eleve<br />";
			$res_matieres_eleve=mysqli_query($GLOBALS["mysqli"], $sql_matieres_eleve);
			if(mysqli_num_rows($res_matieres_eleve)>0) {
				while($lig_matieres_eleve=mysqli_fetch_object($res_matieres_eleve)) {
					$tab_matieres_eleve[]=$lig_matieres_eleve->id_matiere;
				}
			}
		}
		*/
		// Fin modif

		// Récupération de la liste des jours d'ouverture de l'établissement
		$tab_jour=get_tab_jour_ouverture_etab();

		/*
		// 60px pour 1h
		$hauteur_une_heure=60;

		$hauteur_titre=10;
		$hauteur_entete=40;

		$x0=500;
		$y0=200;

		$largeur_edt=800;
		*/
		$largeur_jour=$largeur_edt/count($tab_jour);

		// Titre au-dessus de l'EDT
		$html.="<div style='position:absolute; top:".($y0-$hauteur_entete-$hauteur_titre)."px; left:".$x0."px; width:".$largeur_edt."px; height:".$hauteur_titre."px; text-align:center;'><h3>".$lien_semaine_prec.$titre_edt." - "."Semaine $num_semaine (".$jours['num_jour'][1]['jjmmaaaa']." - ".$jours['num_jour'][7]['jjmmaaaa'].")".$lien_semaine_suiv."</h3></div>";


		//=================================================================================
		$premiere_heure=8;
		//$derniere_heure=16.5;
		$derniere_heure=17;

		// Récupérer les horaires de début et de fin de journée dans le module EDT
		$sql="SELECT * FROM edt_creneaux ORDER BY heuredebut_definie_periode ASC LIMIT 1;";
		$res_premiere_heure=mysqli_query($GLOBALS["mysqli"], $sql);
		if(mysqli_num_rows($res_premiere_heure)>0) {
			$lig_premiere_heure=mysqli_fetch_object($res_premiere_heure);
			$tmp_tab=explode(":", $lig_premiere_heure->heuredebut_definie_periode);
			// Modif _15 du 20151219 par P.Aldebert : puiser à la bonne source pour $heure_debut_jour et $min_debut_jour
			$heure_debut_jour=$tmp_tab[0];
			$min_debut_jour=$tmp_tab[1];
			// Fin modif
			$premiere_heure=$tmp_tab[0]+$tmp_tab[1]/60;
		}

		$sql="SELECT * FROM edt_creneaux ORDER BY heuredebut_definie_periode DESC LIMIT 1;";
		$res_derniere_heure=mysqli_query($GLOBALS["mysqli"], $sql);
		if(mysqli_num_rows($res_derniere_heure)>0) {
			$lig_derniere_heure=mysqli_fetch_object($res_derniere_heure);
			$tmp_tab=explode(":", $lig_derniere_heure->heurefin_definie_periode);
			$derniere_heure=$tmp_tab[0]+$tmp_tab[1]/60;
		}
		//=================================================================================

		// Modif _15 du 20151219 par P.Aldebert : Gepi n'avait pas prévu les heures avec un nombre infini de décimales après décimalisation
		/*
		$tmp_tab=explode(".", $premiere_heure);
		//var_dump($tmp_tab);
		$heure_debut_jour=$tmp_tab[0];
		$min_debut_jour=0;
		if(isset($tmp_tab[1])) {
			$min_debut_jour=floor($tmp_tab[1]*60);
		}
		*/
		$sec_debut_jour=0;
		

		$hauteur_jour=($derniere_heure-$premiere_heure)*$hauteur_une_heure;

		$y_max=$y0+$hauteur_entete+$hauteur_jour;

		$x_jour=array();
		for($i=0;$i<count($tab_jour);$i++) {
			$x_courant=$x0+$i*$largeur_jour;
			$x_jour[$i]=$x_courant;

			// Abscisse du jour au-dessus de l'entête (pour debug)
			if($debug_edt=="y") {
				$html.="<div style='position:absolute; top:".($y0-$hauteur_entete-2)."px; left:".$x_courant."px; width:".$largeur_jour."px; height:".$hauteur_entete."px;'>".$x_jour[$i]."</div>";
			}

			// Nom du jour en entête
			$html.="<div style='position:absolute; top:".$y0."px; left:".$x_courant."px; width:".$largeur_jour."px; height:".$hauteur_entete."px; border:1px solid black; text-align:center; background-color:silver;' title=\"".$jours['num_jour'][$i+1]['jjmmaaaa']."\">".ucfirst($tab_jour[$i])."<br /><span style='font-size:x-small'>".$jours['num_jour'][$i+1]['jjmmaaaa']."</span></div>";

			// Bande verticale de la journée
			$y_courant=$y0+$hauteur_entete;
			$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_jour."px; height:".$hauteur_jour."px; border:1px solid black; background-color:white;z-index:1;'></div>";
			// Pour avoir les traits verticaux
			$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_jour."px; height:".$hauteur_jour."px; border:1px solid black;z-index:4;'></div>";
		}

		/*
		$cpt=0;
		$y_courant=$y0;
		while($y_courant<$y_max) {
			$y_courant=$y0+$hauteur_entete+$cpt*$hauteur_une_heure;
			// Lignes horizontales des heures:
			//$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x0."px; width:".$largeur_edt."px; height:".$hauteur_une_heure."px; border:1px solid grey; z-index:2;'></div>";

			// Affichage des heures sur la gauche:
			//$html.="<div style='position:absolute; top:".($y_courant)."px; left:".($x0-35)."px; width:20px; height:".$hauteur_une_heure."px; text-align:right;'>".($premiere_heure+$cpt)."H</div>";
			// Affichage des heures sur la droite:
			$html.="<div style='position:absolute; top:".($y_courant)."px; left:".($x0+$largeur_edt)."px; width:30px; height:".$hauteur_une_heure."px; text-align:center;'>".($premiere_heure+$cpt)."H</div>";
			// Si la première heure tombe sur une demi-heure, on va avoir des 8.5H, 9.5H,...

			$cpt++;
		}
		*/

		$heure_ronde_debut_jour=floor($premiere_heure);
		$heure_courante=$heure_ronde_debut_jour;
		$heure_ronde_debut_jour=floor($derniere_heure);
		$hauteur_texte=12; // A la louche
		$hauteur_demi_texte=ceil($hauteur_texte/2);
		while($heure_courante<$heure_ronde_debut_jour) {
			$y_courant=$y0+$hauteur_entete+($heure_courante-$premiere_heure)*$hauteur_une_heure-$hauteur_demi_texte;

			$html.="<div style='position:absolute; top:".($y_courant)."px; left:".($x0+$largeur_edt)."px; width:30px; height:".$hauteur_une_heure."px; text-align:center;'>".$heure_courante."H</div>";

			$heure_courante++;
		}

		// CRENEAUX
		$sql="SELECT * FROM edt_creneaux ORDER BY heuredebut_definie_periode;";
		$res_creneaux=mysqli_query($GLOBALS["mysqli"], $sql);
		if(mysqli_num_rows($res_creneaux)>0) {
			while($lig=mysqli_fetch_object($res_creneaux)) {
				$tab_h=explode(":", $lig->heuredebut_definie_periode);
				$c=$tab_h[0]+$tab_h[1]/60-$premiere_heure;
				$y1_courant=$y0+$hauteur_entete+round($c*$hauteur_une_heure);

				$tab_h=explode(":", $lig->heurefin_definie_periode);
				$c=$tab_h[0]+$tab_h[1]/60-$premiere_heure;
				$y2_courant=$y0+$hauteur_entete+round($c*$hauteur_une_heure);

				$hauteur_courante=$y2_courant-$y1_courant;

				$style_fond_creneau="background-color:white;";
				if($lig->type_creneaux=="pause") {
					$style_fond_creneau="background-color:silver;";
				}
				elseif($lig->type_creneaux=="repas") {
					$style_fond_creneau="background-color:grey;";
				}

				// Nom du créneau sur la gauche
				$html.="<div style='position:absolute; top:".($y1_courant)."px; left:".($x0-32)."px; width:30px; height:".$hauteur_courante."px; text-align:center; border:1px solid black; vertical-align:middle;".$style_fond_creneau."' title=\"Créneau $lig->nom_definie_periode\nDe $lig->heuredebut_definie_periode à $lig->heurefin_definie_periode.\"><div style='position:relative; width:2em; height:1em;'>".$lig->nom_definie_periode."</div></div>";

				// Bandes horizontales du créneau
				$html.="<div style='position:absolute; top:".($y1_courant)."px; left:".$x0."px; width:".$largeur_edt."px; height:".$hauteur_courante."px; border:1px solid silver; z-index:2;".$style_fond_creneau."'></div>";

				// Debug
				if($debug_edt=="y") {
					$html.="<div style='position:absolute; top:".($y1_courant)."px; left:".($x0+$largeur_edt+30)."px; width:".$largeur_edt."px; height:".$hauteur_courante."px; color:red; z-index:2;'>$y1_courant</div>";
				}

			}
		}

		// Pour avoir une marge en bas sous l'EDT:
		$html.="<div style='position:absolute; top:".($y0+$hauteur_entete+$hauteur_jour+10)."px; left:".$x0."px; height:1em; width:1em;'>&nbsp;</div>";

		$marge_secu=6;
		
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		//var_dump($marge_secu);
		
		$tab_cours=array();
		$tab_nom_classe=array();

		while($lig=mysqli_fetch_object($res_cours_de_la_semaine)) {
			if($debug_edt=="y") {
				echo "<pre style='border:1px solid red; margin:0.5em;'>";
				print_r($lig);
				echo "</pre>";
			}

			$ts_debut=mysql_date_to_unix_timestamp($lig->date_debut);
			$horaire_debut=strftime("%H:%M", $ts_debut);
			$ts_fin=mysql_date_to_unix_timestamp($lig->date_fin);
			$horaire_fin=strftime("%H:%M", $ts_fin);

			// Modif _15 du 20151005 par P.Aldebert : la fonction strftime ne fonctionne pas avec %u
			// Puisque la question du dimanche ne se pose jamais, on peut utiliser w à la place
			//$num_jour=strftime("%u", $ts_debut)-1;
			$num_jour=strftime("%w", $ts_debut)-1;
			// Fin modif

			$jour_debut_jour=strftime("%d", $ts_debut);
			$mois_debut_jour=strftime("%m", $ts_debut);
			$annee_debut_jour=strftime("%Y", $ts_debut);
			$ts_debut_jour=mktime($heure_debut_jour,$min_debut_jour,$sec_debut_jour,$mois_debut_jour,$jour_debut_jour,$annee_debut_jour);

			$duree_en_min=floor(($ts_fin-$ts_debut)/60);
			$hauteur_courante=floor($duree_en_min*$hauteur_une_heure/60);
			//$hauteur_courante=floor($duree_en_min*$hauteur_une_heure/60)-ceil($marge_secu/2);

			//$duree_depuis_debut_journee=floor(($ts_debut-$ts_debut_jour)/3600);
			$duree_depuis_debut_journee=floor(10*($ts_debut-$ts_debut_jour)/3600)/10;
			//$y_courant=$y0+$hauteur_entete+$duree_depuis_debut_journee*$hauteur_une_heure;
			$y_courant=$y0+$hauteur_entete+$duree_depuis_debut_journee*$hauteur_une_heure+ceil($marge_secu/2);

			if($debug_edt=="y") {
				$html.="\$jour_debut_jour=$jour_debut_jour<br />";
				$html.="\$ts_debut_jour=$ts_debut_jour<br />";
				$html.="\$ts_debut=$ts_debut<br />";
				$html.="\$duree_depuis_debut_journee=$duree_depuis_debut_journee<br />";
				$html.="y_courant=$y_courant<br />";
			}

			$cpt_courant=0;
			if(isset($tab_cours[$num_jour]['y'][$y_courant])) {
				$cpt_courant=count($tab_cours[$num_jour]['y'][$y_courant]);
			}
			$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['hauteur']=$hauteur_courante;
			// A FAIRE : Stocker dans des tableaux les retours de fonction qui suivent pour ne pas faire plusieurs fois les mêmes appels
			// Modif _16 du 20160920 par P.Aldebert : on reste à matiere_ics si id_groupe==0
			// Modif _15 du 20160422 par P.Aldebert : rajouter l'id_groupe
			$gruppe=$lig->id_groupe;
			$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['id_groupe']=$gruppe;
			// Fin modif
			if ($gruppe==0) {
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['matiere']['matiere']=$lig->matiere_ics;
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['matiere']['nom_complet']=$lig->matiere_ics;
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['matiere']['association_faite']="y";
			} else {
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['matiere']=get_tab_matiere_gepi_pour_matiere_ics($lig->matiere_ics);
			}
			$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['prof']=get_tab_prof_gepi_pour_prof_ics($lig->prof_ics);
			// Modif _16 du 20160922 par P.Aldebert : eplucher les underscores éventuels
			$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['salle']=epluche_under($lig->salle_ics);
			// Fin modif
			// Modif _15 du 20160124 par P.Aldebert : rajouter la mention
			$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['mention_eve']=$lig->classe_ics;
			// Fin modif
			// Modif _15 du 20160124 par P.Aldebert : rajouter la partie de classe
			$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['partie']=$lig->partie_ics;
			// Fin modif
			// Modif _15 du 20160124 par P.Aldebert : rajouter les parties matières brutes et qu
			$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['mat_brut']=$lig->matiere_ics;
			$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['qu']=$lig->qu;
			// Fin modif
			$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['id_cours']=$lig->id;
			// DEBUG
			//$ident=$lig->id;
			////var_dump($y_courant);
			////var_dump($cpt_courant);
			////var_dump("Pour ces valeurs, on collecte:");
			////var_dump($ident);
			// Fin debug
			$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['id_classe']=$lig->id_classe;
			if(!array_key_exists($lig->id_classe, $tab_nom_classe)) {
				$tab_nom_classe[$lig->id_classe]=get_nom_classe($lig->id_classe);
			}
			$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['classe']=$tab_nom_classe[$lig->id_classe];
			$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['horaire_debut']=$horaire_debut;
			$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['horaire_fin']=$horaire_fin;

			// Stockage des identifiants de cours que n'ont pas les élèves faute de suivre la matière
			if(($_SESSION['statut']=='eleve')&&
			($tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['matiere']['association_faite']=="y")&&
			(!in_array($tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['matiere']['matiere'], $tab_matieres_eleve))) {
				$tab_id_cours_exclu[]=$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['id_cours'];
			}

		}

		////var_dump($tab_cours);
		if($debug_edt=="y") {
			echo "\$tab_cours<pre>";
			print_r($tab_cours);
			echo "</pre>";
		}

		if($type_edt=="classe") {

			$tab_collisions=array();

			$tab_collisions2=array();

			foreach($tab_cours as $num_jour => $tab) {
			//var_dump("Pour chaque journée");
			//var_dump($num_jour);

				/*
				if($num_jour==0) {
					echo "\$tab_cours[$num_jour]<pre>";
					print_r($tab_cours[$num_jour]);
					echo "</pre>";
				}
				*/

				foreach($tab['y'] as $y_courant => $tab2) {
					// Pour chaque cours de la journée
					for($loop=0;$loop<count($tab2);$loop++) {
						// 
						//var_dump("Pour chaque cours de la journée débutant à une heure donnée");
						//var_dump(count($tab2));
						$hauteur_courante=$tab2[$loop]['hauteur'];
						$y_courant_fin=$y_courant+$hauteur_courante;

						$id_cours_courant=$tab2[$loop]['id_cours'];
						//var_dump("id_cours_courant");
						//var_dump($id_cours_courant);

						foreach($tab_cours[$num_jour]['y'] as $y3=> $tab3_cours) {
							//var_dump("Pour chaque heure de la journée");
							//var_dump("y3:");
							//var_dump($y3);
							/*
							echo "y3=$y3<pre>";
							print_r($tab3_cours);
							echo "</pre>";
							*/
							////var_dump($tab3_cours);
							//var_dump("Pour chaque cours commençant de ce jour commençant à cette heure");
							//var_dump("il y en a");
							//var_dump(count($tab3_cours));
							//var_dump("il ne devrait y avoir pas plus que cela");

							for($loop3=0;$loop3<count($tab3_cours);$loop3++) {
								
								if($tab3_cours[$loop3]['id_cours']!=$id_cours_courant) {
									$y_test_debut=$y3;
									$y_test_fin=$y3+$tab3_cours[$loop3]['hauteur'];
									$id_cours_test=$tab3_cours[$loop3]['id_cours'];
									//var_dump("y_courant");
									//var_dump($y_courant);
									//var_dump("y_courant_fin");
									//var_dump($y_courant_fin);
									//var_dump("y_test_debut");
									//var_dump($y_test_debut);
									//var_dump("y_test_fin");
									//var_dump($y_test_fin);

									if(($y_test_debut>=$y_courant)&&($y_test_debut<$y_courant_fin)) {
										if((!isset($tab_collisions[$id_cours_courant]))||(!in_array($id_cours_test, $tab_collisions[$id_cours_courant]))) {
											$tab_collisions[$id_cours_courant][]=$id_cours_test;
										}
									}
									elseif(($y_courant>=$y_test_debut)&&($y_courant<$y_test_fin)) {
										if((!isset($tab_collisions[$id_cours_courant]))||(!in_array($id_cours_test, $tab_collisions[$id_cours_courant]))) {
											$tab_collisions[$id_cours_courant][]=$id_cours_test;
										}
									}

								}
								//var_dump("y a t-il une collision avec");
								//var_dump($tab3_cours[$loop3]['id_cours']);
								//var_dump("réponse donc pour monsieur:");
								//var_dump($id_cours_courant);
								//var_dump($tab_collisions[$id_cours_courant]);
							}

						}
					}
				}
			}

			/*
			//$tab_aff=array(7352,7367,7359);
			$tab_aff=array(7396,7402,7394);
			for($loop=0;$loop<count($tab_aff);$loop++) {
				echo "tab_collisions[".$tab_aff[$loop]."]=<pre>";
				print_r($tab_collisions[$tab_aff[$loop]]);
				echo "</pre>";
			}

			echo "<pre>";
			print_r($tab_collisions);
			echo "</pre>";
			*/

			$tab_coord_prises=array();
			foreach($tab_cours as $num_jour => $tab) {
				foreach($tab['y'] as $y_courant => $tab2) {
					for($loop=0;$loop<count($tab2);$loop++) {
						//$hauteur_courante=$tab2[$loop]['hauteur'];
						$hauteur_courante=$tab2[$loop]['hauteur']-$marge_secu;

						$title="".$tab2[$loop]['matiere']['nom_complet'];
						if($tab2[$loop]['prof']['designation']!="") {
							$title.=" avec ".$tab2[$loop]['prof']['designation'];
						}
						// Modif _16 du 20160921 par P.Aldebert : mention particulière pour le multiprof EPS
						// Modif _15 du 20160125 par P.Aldebert : rajouter une mention pour les cours en alternance sauf EPS
						/*
						if(($tab2[$loop]['qu']!="")&&($tab2[$loop]['mat_brut']!=$libelle_index_education_eps)) {
							$title.=" en service partagé";
						}
						*/
						if($tab2[$loop]['qu']!="") {
							if ($tab2[$loop]['mat_brut']!=$libelle_index_education_eps) {
								$title.=" (en service partagé)";
							} else {
								$title.=" (en service à plusieurs)";
							}
						}
						// Fin modifs
						if($tab2[$loop]['salle']!="") {
							// Modif _16 du 20160921 par P.Aldebert : chgt mot à mot
							//$title.=" en salle ".$tab2[$loop]['salle'];
							$title.=" lieu : ".$tab2[$loop]['salle'];
							// Fin modif
						}
						// Modif _15 du 20160124 par P.Aldebert : rajouter la partie de classe concernée
						if($tab2[$loop]['partie']!="") {
							$title.=" partie de classe ".$tab2[$loop]['partie'];
						}
						// Fin modif
						$title.="\nDe ".$wz[$tab2[$loop]['horaire_debut']]." à ".$wz[$tab2[$loop]['horaire_fin']].".";

						$id_cours_courant=$tab2[$loop]['id_cours'];
						// Modif _15 du 20160510 par P.Aldebert : noter la mention eve
						// Modif _15 du 20160422 par P.Aldebert : noter le id_groupe_courant
						$id_groupe_courant=$tab2[$loop]['id_groupe'];
						$mention_eve=$tab2[$loop]['mention_eve'];
						// Fin modif
						// Modif _16 du 20161111 par P.Aldebert : pour les profils CPE et admin, donner l'id_groupe s'il n'est pas nul
						// et donner la mention si elle n'est pas vide;
						// Pour l'administrateur, le pavé
						if (($id_groupe_courant!=0)&&(($_SESSION['statut']=='cpe')||($_SESSION['statut']=='administrateur')||($_SESSION['statut']=='scolarite'))) {
							$title.="\nGroupe : ".$id_groupe_courant;
						}
						if (($mention_eve!="")&&(($_SESSION['statut']=='cpe')||($_SESSION['statut']=='administrateur')||($_SESSION['statut']=='scolarite'))) {
							$title.="\nMention : ".$mention_eve;
						}
						if (($_SESSION['statut']=='administrateur')||($_SESSION['statut']=='cpe')) {
							$title.="\nPavé : ".$tab2[$loop]['id_cours'];
						}
						// Fin modif

						$x_courant=$x_jour[$num_jour]+$marge_secu;
						$largeur_courante=$largeur_jour-2*$marge_secu;
						// DEBug
						//$title.="; ";
						//$title.=$largeur_courante;
						//$title.="\nCoordonnées : ".$x_courant.",".$y_courant.",".($x_courant+$largeur_courante).",".($y_courant+$hauteur_courante);
						// Fin debug
						$text_color="";
						$font_size="";

						$style_font_size1=" style='font-size:normal;'";
						$style_font_size2=" style='font-size:x-small;'";
						$contenu_courant_ajout="";
						if(isset($tab_collisions[$id_cours_courant])) {

							$style_font_size1=" style='font-size:x-small;'";
							$style_font_size2=" style='font-size:xx-small;'";

							if($debug_edt=="y") {
								$contenu_courant_ajout.="<br />nb_col=".count($tab_collisions[$id_cours_courant]);
							}

							// Compter les collisions effectives
							$nb=count($tab_collisions[$id_cours_courant]);
							// Debug
							/*
							$title.="; ";
							$title.=$nb;
							$title.="; n° cours:";							
							$title.=$id_cours_courant;
							*/
							// Fin debug
							foreach($tab_collisions[$id_cours_courant] as $id_cours_test) {
								$nb=min($nb,count($tab_collisions[$id_cours_test]));
							}
							if($debug_edt=="y") {
								$contenu_courant_ajout.="<br />nb_reel=".$nb;
							}
							// Largeur du div de ce cours
							//$largeur_courante=floor($largeur_jour/($nb+1))-2*$marge_secu;
							// On donne au moins 1px de large... par sécurité
							$largeur_courante=max(floor($largeur_jour/($nb+1))-2*$marge_secu,1);


							//$font_size="font-size:x-small;";
							//$font_size="font-size:smaller;";
							$tmp_tab=array();
							$tmp_tab[]=$id_cours_courant;
							//foreach($tab_collisions as $tmp_current_id_cours => $tmp_current_id_cours_collision) {
							foreach($tab_collisions[$id_cours_courant] as $tmp_current_id_cours_collision) {
								$tmp_tab[]=$tmp_current_id_cours_collision;
							}
							sort($tmp_tab);

							$chaine="";
							for($loop2=0;$loop2<count($tmp_tab);$loop2++) {
								if($chaine!="") {
									$chaine.="|";
								}
								$chaine.=$tmp_tab[$loop2];
							}

							while($x_courant<$x_jour[$num_jour]+$largeur_jour) {
								if(check_pas_de_collision($x_courant,$y_courant,$x_courant+$largeur_courante,$y_courant+$hauteur_courante)) {
									$text_color="";
									break;
								}
								else {
									//$x_courant+=$largeur_courante;
									//$x_courant+=floor($largeur_jour/($nb+1))+$marge_secu;
									$x_courant+=floor($largeur_jour/($nb+1));
									$text_color="color:red;";
								}
							}

							if($text_color!="") {
								$x_courant=$x_jour[$num_jour];
							}

							$tab_coord_prises[]=$x_courant.",".$y_courant.",".($x_courant+$largeur_courante).",".($y_courant+$hauteur_courante);
							if($debug_edt=="y") {
								$title.="\nCoordonnées : ".$x_courant.",".$y_courant.",".($x_courant+$largeur_courante).",".($y_courant+$hauteur_courante);
							}
						}

						$contenu_courant="<span title=\"$title\"$style_font_size1>".$tab2[$loop]['matiere']['matiere']."</span>";

						// Ne pas inclure ce qui suit pour l'emploi du temps du prof
						if($type_edt!="prof") {
							$contenu_courant.="<br /><span$style_font_size2 title=\"".$tab2[$loop]['prof']['designation']."\">".$tab2[$loop]['prof']['nom']."</span>";
						}
						else {
							$contenu_courant.="<br /><span$style_font_size2 title=\"".$tab2[$loop]['classe']."\">".$tab2[$loop]['classe']."</span>";
						}
						// Ne pas inclure ce qui suit pour l'emploi du temps d'une salle
						$contenu_courant.="<br /><span$style_font_size2 title=\"Salle ".$tab2[$loop]['salle']."\">".$tab2[$loop]['salle']."</span>";

						if($debug_edt=="y") {
							$contenu_courant.="<br />id_cours=".$id_cours_courant;
						}

						$contenu_courant.=$contenu_courant_ajout;

						// Fond blanc pour masquer les lignes d'heures
						$html.="<div id='div_fond_masque_cours_".$tab2[$loop]['id_cours']."' style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; background-color:white; z-index:18; '></div>";

						// Cadre de couleur avec une opacité réglable
						if(!isset($tab_couleur_matiere[$tab2[$loop]['matiere']['matiere']])) {
							$tab_couleur_matiere[$tab2[$loop]['matiere']['matiere']]=get_couleur_edt_matiere($weise, $tab2[$loop]['matiere']['matiere']);
						}
						// Modif _15 du 20160510 par P.Aldebert : gestion des couleurs étendue						
						// Modif _15 du 20160422 par P.Aldebert : la couleur dépend du type de groupe
						//$couleur_courante=$tab_couleur_matiere[$tab2[$loop]['matiere']['matiere']];
						$aux=get_supp($id_groupe_courant,$mention_eve);
						$couleur_courante=$aux['barva'];
						if($aux['ratio']!="") {
							$title=$aux['ratio'];
						}
						// Fin modif
						
						$html.="<div id='div_fond_couleur_cours_".$tab2[$loop]['id_cours']."' style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; border:1px solid black; background-color:".$couleur_courante."; opacity:$opacity_couleur; z-index:19; text-align:center;".$text_color.$font_size."' title='$title'></div>";

						// Cadre du contenu de la cellule
						
						// Modif _16 du 20161123 par P.Aldebert : italique si le lieu a été modifié
						// La salle a t-elle changé?
						$salle_neu=$tab2[$loop]['salle'];
						$szl="SELECT salle_ics FROM edt_ics_base WHERE id='".$id_cours_courant."'";
						$exed=sql_query($szl);
						if (!$exed) {die("Erreur dans l'exécution de : ".$szl);}
						$nb_datensatz=mysqli_num_rows($exed);
						if($nb_datensatz==1) {
						// Dans le cas d'un pavé créé, il n'y a pas eu de copie dans edt_ics_base
						$salle_alt=old_mysql_result($exed,0,'salle_ics');
							if (($salle_alt!=$salle_neu)&&($tab2[$loop]['mat_brut']!=$libelle_index_education_eps)) {
								$contenu_courant="<b><i>".$contenu_courant."</i></b>";
							}
						}
						// Fin modif
						
						$html.="<div id='div_texte_cours_".$tab2[$loop]['id_cours']."' style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; border:1px solid black; z-index:20; text-align:center; overflow:hidden; ".$text_color.$font_size."' title='$title'>".$contenu_courant."</div>";
					}

				}
			}
		}
		else {
			// EDT PROF ET ELEVE

			foreach($tab_cours as $num_jour => $tab) {
				foreach($tab['y'] as $y_courant => $tab2) {
					/*
					if($num_jour==2) {
						echo "\$y_courant=$y_courant \$tab2<pre>";
						print_r($tab2);
						echo "</pre>";
					}
					*/
					//var_dump($tab2);
					
					$liste_classe="";
					// Modif _17 du 20170909 par P. Aldebert :
					// La propagation ne fonctionne pas en multiprofs: il faut donc agréger en une les indications de plusieurs pavés de même classe
					$classe_anc="";
					if(count($tab2)==1) {
						$liste_classe.=$tab2[0]['classe'];
					} else {
						for($loop=0;$loop<count($tab2);$loop++) {
							if($liste_classe!="") {
								// Puisque la liste n'est pas vide, c'est qu'il y  a  déjà eu un enregistrement et un classe_anc
								// On rajoute si ce n'est pas la même chose
								if ($tab2[$loop]['classe']!=$classe_anc) {
									$liste_classe.=", ";
									$liste_classe.=$tab2[$loop]['classe'];
								}
							} else {
								// La liste est vide
								$liste_classe.=$tab2[$loop]['classe'];
								$classe_anc=$tab2[$loop]['classe'];
							}
						}
					}
					// Fin modif
					
					// Modif _17 du 20170906 par P. Aldebert : pour les parties aussi il faut "additionner" les indications
					if ($type_edt=='prof') {
						$liste_partie="";
						for($loop=0;$loop<count($tab2);$loop++) {
							$candidat_brut=$tab2[$loop]['partie'];
							if ($candidat_brut!="") {
								// D'abord, nettoyer la chaîne des blancs éventuels
								$candidat_net="";
								for ($ww=0;$ww<strlen($candidat_brut);$ww++) {
									$kar=substr($candidat_brut,$ww,1);
									if ($kar!=" ") {
										$candidat_net.=$kar;
									}
								}
								// Si c'est nouveau, on ajoute (cas 1SGR3)
								if($liste_partie!=$candidat_net) {
									if ($liste_partie!="") {
										$liste_partie.=", ";
									}
									$liste_partie.=$candidat_net;
								}
							}
						}
					}
					// Fin modif

					//for($loop=0;$loop<count($tab2);$loop++) {
					// Modif _17 du 20170910 par P. Aldebert : dans le cas du multiprofs, il y a plusieurs enregistrements 
					// On ne va pas choisir systématiquement le premier car par exemple si un prof est absent, c'est l'autre titulaire qui va assurer le cours
					//$loop=0;
					if (count($tab2)==1) {
						$loop=0;
					} else {
						// Recherche d'un enregistrement éventuel sans mention
						$sans_mention=False;
						for ($rr=0;$rr<count($tab2);$rr++) {
							//echo "<br />".$tab2[$rr]['id_cours'];
							//echo "<br />".$tab2[$rr]['mention_eve'];							
							if($tab2[$rr]['mention_eve']=='') {
								$sans_mention=True;
								$loop=$rr;
							}							
						}
						if (!$sans_mention) {
							// Ils ont tous une mention, tant pis, on prend le premier
							$loop=0;
						}
					}
						
						// On puise les renseignements communs à tous les $id_cours (pavés de edt_ics) différents
						// Modif _15 du 20160510 par P.Aldebert : on recueille $id_groupe_courant et classe ics
						$id_groupe_courant=$tab2[$loop]['id_groupe'];
						$mention_eve=$tab2[$loop]['mention_eve'];
						// Fin modif
						
						//$hauteur_courante=$tab2[$loop]['hauteur'];
						$hauteur_courante=$tab2[$loop]['hauteur']-$marge_secu;

						$title="Enseignement de ".$tab2[$loop]['matiere']['nom_complet']."\n";
						if($liste_classe!="") {
							if(count($tab2)>1) {
								$title.="Classe(s) : ".$liste_classe."\n";
							}
							else {
								$title.="Classe : ".$liste_classe."\n";
							}
						}
						if($tab2[$loop]['prof']['designation']!="") {
							$title.="Professeur : ".$tab2[$loop]['prof']['designation']."\n";
						}
						// Modif _16 du 20160921 par P.Aldebert : mention particulière pour le multiprof EPS
						// Modif _15 du 20160125 par P.Aldebert : rajouter une mention pour les cours en alternance sauf EPS
						/*
						if(($tab2[$loop]['qu']!="")&&($tab2[$loop]['mat_brut']!=$libelle_index_education_eps)) {
							$title.=" en service partagé";
						}
						*/
						if($tab2[$loop]['qu']!="") {
							if ($tab2[$loop]['mat_brut']!=$libelle_index_education_eps) {
								$title.=" (en service partagé)";
							} else {
								$title.=" (en service à plusieurs)";
							}
						}
						// Fin modifs
						if($tab2[$loop]['salle']!="") {
							// Modif _16 du 20160921 : chgt mot à mot
							//$title.="En salle ".$tab2[$loop]['salle'];
							$title.="Lieu : ".$tab2[$loop]['salle'];
							// Fin modif
						}
						// Modif _17 du 20170906 par P.Aldebert : dans le cas prof, mettre toutes les parties
						// Modif _15 du 20160124 par P.Aldebert : rajouter la partie de classe concernée
						if ($type_edt=='prof') {
							if($liste_partie!="") {
								$title.=" partie(s) ".$liste_partie;
							}
						} else {
							if($tab2[$loop]['partie']!="") {
								$title.=" partie de classe ".$tab2[$loop]['partie'];
							}
						}
						// Fin modifs
						// Modif _15 du 20160126 par P.Aldebert : mettre les vrais horaires
						//$title.="\nDe ".$tab2[$loop]['horaire_debut']." à ".$tab2[$loop]['horaire_fin'].".";
						$title.="\nDe ".$wz[$tab2[$loop]['horaire_debut']]." à ".$wz[$tab2[$loop]['horaire_fin']].".";
						// Fin modif

						$id_cours_courant=$tab2[$loop]['id_cours'];
						// Modif _16 du 20161111 par P.Aldebert : pour les profils CPE et admin, donner l'id_groupe s'il n'est pas nul
						// et donner la mention_eve si elle n'est pas vide
						if (($id_groupe_courant!=0)&&(($_SESSION['statut']=='cpe')||($_SESSION['statut']=='administrateur')||($_SESSION['statut']=='scolarite'))) {
							$title.="\nGroupe : ".$id_groupe_courant;
						}
						if (($mention_eve!="")&&(($_SESSION['statut']=='cpe')||($_SESSION['statut']=='administrateur')||($_SESSION['statut']=='scolarite'))) {
							$title.="\nMention : ".$mention_eve;
						}
						if (($_SESSION['statut']=='administrateur')||($_SESSION['statut']=='cpe')) {
							$title.="\nPavé : ".$id_cours_courant;
						}
						// Modif_17 du 20170910 par P. Aldebert : pour l'administrateur, rajouter le cardinal sur la même ligne que pavé
						if ($_SESSION['statut']=='administrateur') {
							$title.="; Cardinal : ".count($tab2);
						}
						// Fin modifs

						$x_courant=$x_jour[$num_jour]+$marge_secu;
						$largeur_courante=$largeur_jour-2*$marge_secu;
						$text_color="";
						$font_size="";

						$style_font_size1=" style='font-size:normal;'";
						$style_font_size2=" style='font-size:x-small;'";

						$contenu_courant_ajout="";

						$contenu_courant="<span title=\"$title\"$style_font_size1>".$tab2[$loop]['matiere']['matiere']."</span>";

						// Ne pas inclure ce qui suit pour l'emploi du temps du prof
						if($type_edt!="prof") {
							$contenu_courant.="<br /><span$style_font_size2 title=\"".$tab2[$loop]['prof']['designation']."\">".$tab2[$loop]['prof']['nom']."</span>";
						}
						else {
							$contenu_courant.="<br /><span$style_font_size2 title=\"".$liste_classe."\">".$liste_classe."</span>";
						}
						// Ne pas inclure ce qui suit pour l'emploi du temps d'une salle
						$contenu_courant.="<br /><span$style_font_size2 title=\"Salle ".$tab2[$loop]['salle']."\">".$tab2[$loop]['salle']."</span>";

						if($debug_edt=="y") {
							$contenu_courant.="<br />id_cours=".$id_cours_courant;
						}

						$contenu_courant.=$contenu_courant_ajout;

						// Fond blanc pour masquer les lignes d'heures/créneaux
						$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; background-color:white; z-index:18; '></div>";
						// Cadre de couleur avec une opacité réglable
						if(!isset($tab_couleur_matiere[$tab2[$loop]['matiere']['matiere']])) {
							$tab_couleur_matiere[$tab2[$loop]['matiere']['matiere']]=get_couleur_edt_matiere($weise, $tab2[$loop]['matiere']['matiere']);
						}
						// Modif _15 du 20160510 par P.Aldebert : gestion des couleurs étendue						
						// Modif _15 du 20160422 par P.Aldebert : la couleur dépend du type de groupe
						//$couleur_courante=$tab_couleur_matiere[$tab2[$loop]['matiere']['matiere']];
						$hilff=get_supp($id_groupe_courant,$mention_eve);
						$couleur_courante=$hilff['barva'];
						if($hilff['ratio']!="") {
							$title=$hilff['ratio'];
						}
						// Fin modif
						
						$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; border:1px solid black; background-color:".$couleur_courante."; opacity:$opacity_couleur; z-index:19; text-align:center;".$text_color.$font_size."' title='$title'></div>";

						// Cadre du contenu de la cellule
						
						// Modif _16 du 20161123 par P.Aldebert : italique si le lieu a été modifié
						// La salle a t-elle changé?
						$salle_neu=$tab2[$loop]['salle'];
						$szl="SELECT salle_ics FROM edt_ics_base WHERE id='".$id_cours_courant."'";
						$exed=sql_query($szl);
						if (!$exed) {die("Erreur dans l'exécution de : ".$szl);}
						$nb_datensatz=mysqli_num_rows($exed);
						if($nb_datensatz==1) {
							$salle_alt=old_mysql_result($exed,0,'salle_ics');
							if (($salle_alt!=$salle_neu)&&($tab2[$loop]['mat_brut']!=$libelle_index_education_eps)) {
								$contenu_courant="<b><i>".$contenu_courant."</i></b>";
							}
						}
						// Fin modif
						
						$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; border:1px solid black; z-index:20; text-align:center; overflow:hidden; ".$text_color.$font_size."' title='$title'>".$contenu_courant."</div>";
					//}

				}
			}
		}

		if(($_SESSION['statut']=='eleve')&&(count($tab_id_cours_exclu)>0)) {
			$html.="<div id='div_affichage_masquage' title=\"Afficher/masquer les cours dans les matières
que vous ne suivez pas.

NOTE: Cela ne permet pas de masquer les groupes
      ne vous concernant pas dans une matière
      que vous suivez.\" style='position:absolute; top:".$y0."px; left:".($x0-20)."px; width:16px; display:none;'>
		<a href='javascript:masquer_cours_matieres_non_suivies()' id='lien_masquer_cours_matieres_non_suivies'><img src='../images/icons/visible.png' class='icone16' /></a>
		<a href='javascript:afficher_cours_matieres_non_suivies()' id='lien_afficher_cours_matieres_non_suivies'><img src='../images/icons/invisible.png' class='icone16' /></a>
	</div>

	<script type='text/javascript'>
		document.getElementById('div_affichage_masquage').style.display='';
		document.getElementById('lien_afficher_cours_matieres_non_suivies').style.display='none';

		function masquer_cours_matieres_non_suivies() {
			document.getElementById('lien_afficher_cours_matieres_non_suivies').style.display='';
			document.getElementById('lien_masquer_cours_matieres_non_suivies').style.display='none';";
			for($loop=0;$loop<count($tab_id_cours_exclu);$loop++) {
				$html.="
			document.getElementById('div_fond_masque_cours_".$tab_id_cours_exclu[$loop]."').style.display='none';
			document.getElementById('div_fond_couleur_cours_".$tab_id_cours_exclu[$loop]."').style.display='none';
			document.getElementById('div_texte_cours_".$tab_id_cours_exclu[$loop]."').style.display='none';";
			}
			$html.="
		}

		function afficher_cours_matieres_non_suivies() {
			document.getElementById('lien_afficher_cours_matieres_non_suivies').style.display='none';
			document.getElementById('lien_masquer_cours_matieres_non_suivies').style.display='';";
			for($loop=0;$loop<count($tab_id_cours_exclu);$loop++) {
				$html.="
			document.getElementById('div_fond_masque_cours_".$tab_id_cours_exclu[$loop]."').style.display='';
			document.getElementById('div_fond_couleur_cours_".$tab_id_cours_exclu[$loop]."').style.display='';
			document.getElementById('div_texte_cours_".$tab_id_cours_exclu[$loop]."').style.display='';";
			}
			$html.="
		}
	</script>";
		}
		// Modif _16 du 20161110 par P.Aldebert : nouveau pavé : attention pour les couleurs !
		if($_SESSION['statut']!='professeur') {
			$pflichtig="présence ";
		} else {
			$pflichtig="présence des élèves ";
		}
		
		$html.="<div style='position:absolute; top:".($y0+$hauteur_jour+50)."px; left:".$x0."px; width:".$largeur_edt."px; height:12em; border:1px solid black; z-index:1000; text-align:center; background-color:white;'>";
		//$html.="Nouveau pavé.<br />Nouveau pavé.<br />Nouveau pavé.";
		$html.="<table>";
		
		// Ligne normale
		$html.="<tr>";		
		$html.="<td style='background-color:".$bv['n']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['n']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['n']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['n']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";		
		$html.="<td style='text-align:left'>&nbsp;&nbsp;Cours habituel.</td></tr>";
		
		// Ligne cso
		$html.="<tr>";		
		$html.="<td style='background-color:".$bv['o']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['o']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['o']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['o']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";		
		$html.="<td style='text-align:left'>&nbsp;&nbsp;Cours supplémentaire ou remplacement; ".$pflichtig."obligatoire.</td></tr>";
		
		// Ligne conférence
		$html.="<tr>";		
		$html.="<td style='background-color:".$bv['c']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['c']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['k']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['k']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";		
		$html.="<td style='text-align:left'>&nbsp;&nbsp;Action pédagogique : conférence ; ".$pflichtig."obligatoire.</td></tr>";
		
		// Ligne sortie
		$html.="<tr>";		
		$html.="<td style='background-color:".$bv['s']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['s']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['z']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['z']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";		
		$html.="<td style='text-align:left'>&nbsp;&nbsp;Action pédagogique : sortie ; ".$pflichtig."obligatoire.</td></tr>";

		// Ligne voyage		
		$html.="<tr>";		
		$html.="<td style='background-color:".$bv['v']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['v']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['w']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['w']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";		
		$html.="<td style='text-align:left'>&nbsp;&nbsp;Action pédagogique : voyage ; ".$pflichtig."obligatoire.</td></tr>";

		// Ligne q,b,f,a
		$html.="<tr>";
		$html.="<td style='background-color:".$bv['q']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['b']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['f']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['a']." ; opacity:".$opacity_couleur_carre."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='text-align:left'>&nbsp;&nbsp;Cours non assuré.</td></tr>";

		// Ligne périodes spéciales
		$html.="<tr>";
		$html.="<td style='background-color:".$bv['e']." ; opacity:".$opacity_couleur."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['e']." ; opacity:".$opacity_couleur."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['e']." ; opacity:".$opacity_couleur."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='background-color:".$bv['e']." ; opacity:".$opacity_couleur."; '>&nbsp;&nbsp;&nbsp;</td>";
		$html.="<td style='text-align:left'>&nbsp;&nbsp;Périodes spéciales : bac blanc, stage en entreprise,...</td></tr>";
		
		$html.="</table>";
		
		// Ligne hors table pour le changement de lieu
		$html.="<table>";
		$html.="<td><b><i>Ital. gras</b></i>&nbsp;&nbsp;Cours changeant de salle.</td>";
		$html.="</table>";
		
		$html.="</div>";
		// Fin modif
		// Modif _16 du 20161118 par P. Aldebert : l'information qui suit n'a pas d'intérêt; elle est remplacée par une ligne invitant à solliciter les infobulles
		// Modif _15 du 20160124 par P.Aldebert : adaptation à une caractéristique LFA
		//$html.="<div style='position:absolute; top:".($y0+$hauteur_jour+50)."px; left:".$x0."px; width:".$largeur_edt."px; height:4em; border:1px solid black; z-index:1000; text-align:center; background-color:white;'>L'emploi du temps affiché concerne la semaine indiquée en entête.<br />Les indications de semaines A et B n'y sont pas affichées.<br />Passez à la semaine suivante pour voir les différences.</div>";
		//$html.="<div style='position:absolute; top:".($y0+$hauteur_jour+200)."px; left:".$x0."px; width:".$largeur_edt."px; height:4em; border:1px solid black; z-index:1000; text-align:center; background-color:white;'>L'emploi du temps affiché concerne la semaine indiquée en entête.<br />Les indications éventuelles propres aux semaines Q1 et Q2 ne sont pas affichées.<br />Passez à la semaine suivante pour voir les différences.</div>";
		$html.="<div style='position:absolute; top:".($y0+$hauteur_jour+250)."px; left:".$x0."px; width:".$largeur_edt."px; height:1.1em; border:1px solid black; z-index:1000; text-align:center; background-color:white;'>PLUS D'INFORMATIONS DANS LES DIVERSES INFOBULLES GENEREES DANS LES RECTANGLES</div>";

		// Fin modifs
		
		//=================================================================================
		// Ancien essai, affiché plus bas pour faciliter le debug de l'affichage au-dessus
		if($debug_edt=="y") {
			foreach($tab_cours as $num_jour => $tab) {
				foreach($tab['y'] as $y_courant => $tab2) {
					$y_courant=$y_courant+$hauteur_jour+100;

					if(count($tab2)==1) {
						$hauteur_courante=$tab2[0]['hauteur'];
						$contenu_courant=$tab2[0]['matiere']['matiere'];
						//$contenu_courant.="<br />".$hauteur_courante;

						$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_jour[$num_jour]."px; width:".$largeur_jour."px; height:".$hauteur_courante."px; border:1px solid black; background-color:orange; z-index:1000; opacity:0.5;text-align:center;'>".$contenu_courant."</div>";
					}
					else {
						for($loop=0;$loop<count($tab2);$loop++) {
							$hauteur_courante=$tab2[$loop]['hauteur'];
							$contenu_courant=$tab2[$loop]['matiere']['matiere'];
							//$contenu_courant.="<br />".$hauteur_courante;

							$largeur_courante=floor($largeur_jour/count($tab2));
							$x_courant=$x_jour[$num_jour]+$loop*$largeur_courante;

						$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; border:1px solid black; background-color:orange; z-index:1000; opacity:0.5; font-size:x-small;text-align:center;'>".$contenu_courant."</div>";
						}
					}
				}
			}
		}
		//=================================================================================


		$html.="</div>";
	}
	
	// DEBUT DEUXIEME PASSE POUR LE PROFIL FULL_CPE ET SEULEMENT EDT DE TYPE PROF
	
	// Modif _16 du 20161122 par P.Aldebert : deuxième passe pour pouvoir cliquer directement, réservée aux full_cpe, et pour type_edt=='prof'
	if (($_SESSION['statut']=='cpe')&&(full_cpe($_SESSION['login']))&&($type_edt=='prof')) {
		$res_cours_de_la_semaine=mysqli_query($GLOBALS["mysqli"], $sql_cours_de_la_semaine);
		if(mysqli_num_rows($res_cours_de_la_semaine)==0) {
			$html.="<p>Aucun EDT n'est enregistré.</p>";
		}
		else {

			// Modif _16 du 20161210 par P.Aldebert : TABLEAU DES EMPRISES
			// AD HOC : les jours de cours sont numérotés de 0 à 4	
			
			// Charger une seule fois ce qui correspond à H1,H2...,
			$sql="SELECT * FROM edt_creneaux";
			$exep=sql_query($sql);
			$nbc=mysqli_num_rows($exep);
			if($nbc==0) {die('Erreur de nombre');}
			unset ($tab_b);
			$tab_b=array();
			for($i=0;$i<$nbc;$i++) {
				$num_b=old_mysql_result($exep,$i,'id_definie_periode');
				$tab_b['nom_h'][$num_b]=old_mysql_result($exep,$i,'nom_definie_periode');
				$tab_b['debut'][$num_b]=old_mysql_result($exep,$i,'heuredebut_definie_periode');
				$tab_b['fin'][$num_b]=old_mysql_result($exep,$i,'heurefin_definie_periode');
			}
			$libr=array();
			// Boucler sur les jours
			for ($wi=0;$wi<5;$wi++) {
				$ts_jour_midi=$jours['num_jour'][$wi+1]['timestamp']+12*3600;// midi
				$gdh_midi=strftime("%Y-%m-%d %H:%M:%S",$ts_jour_midi);
				if(lfa_ouvert($gdh_midi)) {
					for ($wj=1;$wj<=$nbc;$wj++) {
						$libr[$wi][$wj]=True;
					}
				} else {
					for ($wj=1;$wj<=$nbc;$wj++) {
						$libr[$wi][$wj]=False;
					}
				}
			}
			//var_dump($tab_b);
			//var_dump($libr);
			// Fin modif
		
			// 60px pour 1h
			$hauteur_une_heure=18;

			$hauteur_titre=3;
			$hauteur_entete=20;

			$x0=950;
			$y0=250;

			$largeur_edt=240;
			
			$largeur_jour=$largeur_edt/count($tab_jour);

			// Titre au-dessus de l'EDT
			//$html.="<div style='position:absolute; top:".($y0-$hauteur_entete-$hauteur_titre)."px; left:".$x0."px; width:".$largeur_edt."px; height:".$hauteur_titre."px; text-align:center;'><h3>".$lien_semaine_prec.$titre_edt." - "."Semaine $num_semaine (".$jours['num_jour'][1]['jjmmaaaa']." - ".$jours['num_jour'][7]['jjmmaaaa'].")".$lien_semaine_suiv."</h3></div>";


			//=================================================================================
			$premiere_heure=8;
			//$derniere_heure=16.5;
			$derniere_heure=17;

			// Récupérer les horaires de début et de fin de journée dans le module EDT
			$sql="SELECT * FROM edt_creneaux ORDER BY heuredebut_definie_periode ASC LIMIT 1;";
			$res_premiere_heure=mysqli_query($GLOBALS["mysqli"], $sql);
			if(mysqli_num_rows($res_premiere_heure)>0) {
				$lig_premiere_heure=mysqli_fetch_object($res_premiere_heure);
				$tmp_tab=explode(":", $lig_premiere_heure->heuredebut_definie_periode);
				// Modif _15 du 20151219 par P.Aldebert : puiser à la bonne source pour $heure_debut_jour et $min_debut_jour
				$heure_debut_jour=$tmp_tab[0];
				$min_debut_jour=$tmp_tab[1];
				// Fin modif
				$premiere_heure=$tmp_tab[0]+$tmp_tab[1]/60;
			}

			$sql="SELECT * FROM edt_creneaux ORDER BY heuredebut_definie_periode DESC LIMIT 1;";
			$res_derniere_heure=mysqli_query($GLOBALS["mysqli"], $sql);
			if(mysqli_num_rows($res_derniere_heure)>0) {
				$lig_derniere_heure=mysqli_fetch_object($res_derniere_heure);
				$tmp_tab=explode(":", $lig_derniere_heure->heurefin_definie_periode);
				$derniere_heure=$tmp_tab[0]+$tmp_tab[1]/60;
			}
			//=================================================================================

			$sec_debut_jour=0;
			

			$hauteur_jour=($derniere_heure-$premiere_heure)*$hauteur_une_heure;

			$y_max=$y0+$hauteur_entete+$hauteur_jour;

			$x_jour=array();
			for($i=0;$i<count($tab_jour);$i++) {
				$x_courant=$x0+$i*$largeur_jour;
				$x_jour[$i]=$x_courant;

				// Nom du jour en entête
				$tagname=ucfirst($tab_jour[$i]);
				$tagname=substr($tagname,0,2);
				$html.="<div style='position:absolute; top:".$y0."px; left:".$x_courant."px; width:".$largeur_jour."px; height:".$hauteur_entete."px; border:1px solid black; text-align:center; background-color:silver;' >".$tagname."</div>";

				// Bande verticale de la journée
				$y_courant=$y0+$hauteur_entete;
				$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_jour."px; height:".$hauteur_jour."px; border:1px solid black; background-color:white;z-index:1;'></div>";
				// Pour avoir les traits verticaux
				$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_jour."px; height:".$hauteur_jour."px; border:1px solid black;z-index:4;'></div>";
			}

			$heure_ronde_debut_jour=floor($premiere_heure);
			$heure_courante=$heure_ronde_debut_jour;
			$heure_ronde_debut_jour=floor($derniere_heure);
			$hauteur_texte=12; // A la louche
			$hauteur_demi_texte=ceil($hauteur_texte/2);
			while($heure_courante<$heure_ronde_debut_jour) {
				$y_courant=$y0+$hauteur_entete+($heure_courante-$premiere_heure)*$hauteur_une_heure-$hauteur_demi_texte;

				$html.="<div style='position:absolute; top:".($y_courant)."px; left:".($x0+$largeur_edt)."px; width:30px; height:".$hauteur_une_heure."px; text-align:center;'>".$heure_courante."H</div>";

				$heure_courante++;
			}

			// CRENEAUX
			$sql="SELECT * FROM edt_creneaux ORDER BY heuredebut_definie_periode;";
			$res_creneaux=mysqli_query($GLOBALS["mysqli"], $sql);
			if(mysqli_num_rows($res_creneaux)>0) {
				while($lig=mysqli_fetch_object($res_creneaux)) {
					$tab_h=explode(":", $lig->heuredebut_definie_periode);
					$c=$tab_h[0]+$tab_h[1]/60-$premiere_heure;
					$y1_courant=$y0+$hauteur_entete+round($c*$hauteur_une_heure);

					$tab_h=explode(":", $lig->heurefin_definie_periode);
					$c=$tab_h[0]+$tab_h[1]/60-$premiere_heure;
					$y2_courant=$y0+$hauteur_entete+round($c*$hauteur_une_heure);

					$hauteur_courante=$y2_courant-$y1_courant;

					$style_fond_creneau="background-color:white;";
					if($lig->type_creneaux=="pause") {
						$style_fond_creneau="background-color:silver;";
					}
					elseif($lig->type_creneaux=="repas") {
						$style_fond_creneau="background-color:grey;";
					}

					// Nom du créneau sur la gauche
					$html.="<div style='position:absolute; top:".($y1_courant)."px; left:".($x0-32)."px; width:30px; height:".$hauteur_courante."px; text-align:center; border:1px solid black; vertical-align:middle;".$style_fond_creneau."' title=\"Créneau $lig->nom_definie_periode\nDe $lig->heuredebut_definie_periode à $lig->heurefin_definie_periode.\"><div style='position:relative; width:2em; height:1em;'>".$lig->nom_definie_periode."</div></div>";

					// Bandes horizontales du créneau
					$html.="<div style='position:absolute; top:".($y1_courant)."px; left:".$x0."px; width:".$largeur_edt."px; height:".$hauteur_courante."px; border:1px solid silver; z-index:2;".$style_fond_creneau."'></div>";

				}
			}

			// Pour avoir une marge en bas sous l'EDT:
			$html.="<div style='position:absolute; top:".($y0+$hauteur_entete+$hauteur_jour+10)."px; left:".$x0."px; height:1em; width:1em;'>&nbsp;</div>";

			$marge_secu=6;
			
			
			$tab_cours=array();
			$tab_nom_classe=array();

			while($lig=mysqli_fetch_object($res_cours_de_la_semaine)) {
				$zp_debut=$lig->date_debut;
				$ts_debut=mysql_date_to_unix_timestamp($zp_debut);
				$horaire_debut=strftime("%H:%M", $ts_debut);
				$zp_fin=$lig->date_fin;
				$ts_fin=mysql_date_to_unix_timestamp($zp_fin);
				$horaire_fin=strftime("%H:%M", $ts_fin);

				// Modif _15 du 20151005 par P.Aldebert : la fonction strftime ne fonctionne pas avec %u
				// Puisque la question du dimanche ne se pose jamais, on peut utiliser w à la place
				//$num_jour=strftime("%u", $ts_debut)-1;
				$num_jour=strftime("%w", $ts_debut)-1;
				// Fin modif
				
				// Modif _16 du 20161210 par P.Aldebert : avec quels créneaux le cours interfère-t-il?
				// C'est le même jour, donc il suffit de changer les neuf derniers caractères du champ date
				for ($zm=1;$zm<=$nbc;$zm++) {
					$deb_cre=substr($zp_debut,0,11).$tab_b['debut'][$zm];
					$fin_cre=substr($zp_fin,0,11).$tab_b['fin'][$zm];
					/*
					$cas_interference=" ( ( '".$deb."'<ei.date_debut AND  '".$fin."'>ei.date_debut) 
								OR 
								( '".$deb."'>ei.date_debut AND  '".$deb."'<ei.date_fin) )  ";
					*/
					
					$cas_interference=( ( $deb_cre<$zp_debut AND $fin_cre>$zp_debut) 
										OR 
										($deb_cre>$zp_debut AND  $deb_cre<$zp_fin) );
					if($cas_interference) {
						$libr[$num_jour][$zm]=False;
					}
				}
				// Fin modif

				$jour_debut_jour=strftime("%d", $ts_debut);
				$mois_debut_jour=strftime("%m", $ts_debut);
				$annee_debut_jour=strftime("%Y", $ts_debut);
				$ts_debut_jour=mktime($heure_debut_jour,$min_debut_jour,$sec_debut_jour,$mois_debut_jour,$jour_debut_jour,$annee_debut_jour);

				$duree_en_min=floor(($ts_fin-$ts_debut)/60);
				$hauteur_courante=floor($duree_en_min*$hauteur_une_heure/60);
				//$hauteur_courante=floor($duree_en_min*$hauteur_une_heure/60)-ceil($marge_secu/2);

				//$duree_depuis_debut_journee=floor(($ts_debut-$ts_debut_jour)/3600);
				$duree_depuis_debut_journee=floor(10*($ts_debut-$ts_debut_jour)/3600)/10;
				//$y_courant=$y0+$hauteur_entete+$duree_depuis_debut_journee*$hauteur_une_heure;
				$y_courant=$y0+$hauteur_entete+$duree_depuis_debut_journee*$hauteur_une_heure+ceil($marge_secu/2);


				$cpt_courant=0;
				if(isset($tab_cours[$num_jour]['y'][$y_courant])) {
					$cpt_courant=count($tab_cours[$num_jour]['y'][$y_courant]);
				}
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['hauteur']=$hauteur_courante;
				// A FAIRE : Stocker dans des tableaux les retours de fonction qui suivent pour ne pas faire plusieurs fois les mêmes appels
				// Modif _16 du 20160920 par P.Aldebert : on reste à matiere_ics si id_groupe==0
				// Modif _15 du 20160422 par P.Aldebert : rajouter l'id_groupe
				$gruppe=$lig->id_groupe;
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['id_groupe']=$gruppe;
				// Fin modif
				if ($gruppe==0) {
					$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['matiere']['matiere']=$lig->matiere_ics;
					$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['matiere']['nom_complet']=$lig->matiere_ics;
					$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['matiere']['association_faite']="y";
				} else {
					$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['matiere']=get_tab_matiere_gepi_pour_matiere_ics($lig->matiere_ics);
				}
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['prof']=get_tab_prof_gepi_pour_prof_ics($lig->prof_ics);
				// Modif _16 du 20160922 par P.Aldebert : eplucher les underscores éventuels
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['salle']=epluche_under($lig->salle_ics);
				// Fin modif
				// Modif _15 du 20160124 par P.Aldebert : rajouter la mention
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['mention_eve']=$lig->classe_ics;
				// Fin modif
				// Modif _15 du 20160124 par P.Aldebert : rajouter la partie de classe
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['partie']=$lig->partie_ics;
				// Fin modif
				// Modif _15 du 20160124 par P.Aldebert : rajouter les parties matières brutes et qu
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['mat_brut']=$lig->matiere_ics;
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['qu']=$lig->qu;
				// Fin modif
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['id_cours']=$lig->id;
				// DEBUG
				//$ident=$lig->id;
				////var_dump($y_courant);
				////var_dump($cpt_courant);
				////var_dump("Pour ces valeurs, on collecte:");
				////var_dump($ident);
				// Fin debug
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['id_classe']=$lig->id_classe;
				if(!array_key_exists($lig->id_classe, $tab_nom_classe)) {
					$tab_nom_classe[$lig->id_classe]=get_nom_classe($lig->id_classe);
				}
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['classe']=$tab_nom_classe[$lig->id_classe];
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['horaire_debut']=$horaire_debut;
				$tab_cours[$num_jour]['y'][$y_courant][$cpt_courant]['horaire_fin']=$horaire_fin;


			}
			
			//var_dump($libr);
			
			// Modif _16 du 20161210 par P.Aldebert : constitution du tableau $non_cours, complément ensembliste de tab_cours

			$non_cours=array();
			
			// AD HOC : jours de la semaine
			for ($i=0;$i<5;$i++) {
				$ts_zero_heure=$jours['num_jour'][$i+1]['timestamp'];
				$zp_zero_heure=strftime("%Y-%m-%d %H:%M:%S",$ts_zero_heure);
				for ($j=1;$j<=$nbc;$j++) {
					if ($libr[$i][$j]) {
						
						$zp_debut=substr($zp_zero_heure,0,11).$tab_b['debut'][$j];
						$ts_debut=mysql_date_to_unix_timestamp($zp_debut);
						$horaire_debut=strftime("%H:%M", $ts_debut);
						$zp_fin=substr($zp_zero_heure,0,11).$tab_b['fin'][$j];
						$ts_fin=mysql_date_to_unix_timestamp($zp_fin);
						$horaire_fin=strftime("%H:%M", $ts_fin);

						// Modif _15 du 20151005 par P.Aldebert : la fonction strftime ne fonctionne pas avec %u
						// Puisque la question du dimanche ne se pose jamais, on peut utiliser w à la place
						//$num_jour=strftime("%u", $ts_debut)-1;
						$num_jour=strftime("%w", $ts_debut)-1;
						// Fin modif
						
						$jour_debut_jour=strftime("%d", $ts_debut);
						$mois_debut_jour=strftime("%m", $ts_debut);
						$annee_debut_jour=strftime("%Y", $ts_debut);
						$ts_debut_jour=mktime($heure_debut_jour,$min_debut_jour,$sec_debut_jour,$mois_debut_jour,$jour_debut_jour,$annee_debut_jour);

						$duree_en_min=floor(($ts_fin-$ts_debut)/60);
						$hauteur_courante=floor($duree_en_min*$hauteur_une_heure/60);
						//$hauteur_courante=floor($duree_en_min*$hauteur_une_heure/60)-ceil($marge_secu/2);

						//$duree_depuis_debut_journee=floor(($ts_debut-$ts_debut_jour)/3600);
						$duree_depuis_debut_journee=floor(10*($ts_debut-$ts_debut_jour)/3600)/10;
						//$y_courant=$y0+$hauteur_entete+$duree_depuis_debut_journee*$hauteur_une_heure;
						$y_courant=$y0+$hauteur_entete+$duree_depuis_debut_journee*$hauteur_une_heure+ceil($marge_secu/2);

						$cpt_courant=0;
						if(isset($non_cours[$num_jour]['y'][$y_courant])) {
							$cpt_courant=count($non_cours[$num_jour]['y'][$y_courant]);
						}
						$non_cours[$num_jour]['y'][$y_courant][$cpt_courant]['hauteur']=$hauteur_courante;
						$non_cours[$num_jour]['y'][$y_courant][$cpt_courant]['num_jour']=$i;
						$non_cours[$num_jour]['y'][$y_courant][$cpt_courant]['creneau']=$j;
						$non_cours[$num_jour]['y'][$y_courant][$cpt_courant]['zp_debut']=$zp_debut;
						$non_cours[$num_jour]['y'][$y_courant][$cpt_courant]['zp_fin']=$zp_fin;
						
					}
				}
			}
			// Fin modif
			//var_dump('lundi');
			//var_dump($non_cours[0]['y']);
			//var_dump('mardi');
			//var_dump($non_cours[1]['y']);
				
			
			// EXCLUSIVEMENT MINI EDT DDE TYPE PROF : ON NE SE SOUCIE PAS DES COLLISIONS (COMPATIBLE ELEVE AUSSI)

			foreach($tab_cours as $num_jour => $tab) {
				foreach($tab['y'] as $y_courant => $tab2) {
					//var_dump($tab2);
					
					$liste_classe="";
					// Modif _17 du 20170909 par P. Aldebert :
					// La propagation ne fonctionne pas en multiprofs: il faut donc agréger en une les indications de plusieurs pavés de même classe
					/*
					for($loop=0;$loop<count($tab2);$loop++) {
						if($liste_classe!="") {
							$liste_classe.=", ";
						}
						$liste_classe.=$tab2[$loop]['classe'];
					}
					*/
					$classe_anc="";
					if(count($tab2)==1) {
						$liste_classe.=$tab2[0]['classe'];
					} else {
						for($loop=0;$loop<count($tab2);$loop++) {
							if($liste_classe!="") {
								// Puisque la liste n'est pas vide, c'est qu'il y  a  déjà eu un enregistrement et un classe_anc
								// On rajoute si ce n'est pas la même chose
								if ($tab2[$loop]['classe']!=$classe_anc) {
									$liste_classe.=", ";
									$liste_classe.=$tab2[$loop]['classe'];
								}
							} else {
								// La liste est vide
								$liste_classe.=$tab2[$loop]['classe'];
								$classe_anc=$tab2[$loop]['classe'];
							}
						}
					}
					// Fin modif

					//for($loop=0;$loop<count($tab2);$loop++) {
					$loop=0;
						
						// On puise les renseignements communs à tous les $id_cours (pavés de edt_ics) différents
						// Modif _15 du 20160510 par P.Aldebert : on recueille $id_groupe_courant et classe ics
						$id_groupe_courant=$tab2[$loop]['id_groupe'];
						$mention_eve=$tab2[$loop]['mention_eve'];
						// Fin modif
						
						//$hauteur_courante=$tab2[$loop]['hauteur'];
						$hauteur_courante=$tab2[$loop]['hauteur']-$marge_secu;

						$title="Enseignement de ".$tab2[$loop]['matiere']['nom_complet']."\n";
						if($liste_classe!="") {
							if(count($tab2)>1) {
								$title.="Classe(s) : ".$liste_classe."\n";
							}
							else {
								$title.="Classe : ".$liste_classe."\n";
							}
						}
						if($tab2[$loop]['prof']['designation']!="") {
							$title.="Professeur : ".$tab2[$loop]['prof']['designation']."\n";
						}
						// Modif _16 du 20160921 par P.Aldebert : mention particulière pour le multiprof EPS
						// Modif _15 du 20160125 par P.Aldebert : rajouter une mention pour les cours en alternance sauf EPS
						/*
						if(($tab2[$loop]['qu']!="")&&($tab2[$loop]['mat_brut']!=$libelle_index_education_eps)) {
							$title.=" en service partagé";
						}
						*/
						if($tab2[$loop]['qu']!="") {
							if ($tab2[$loop]['mat_brut']!=$libelle_index_education_eps) {
								$title.=" (en service partagé)";
							} else {
								$title.=" (en service à plusieurs)";
							}
						}
						// Fin modifs
						if($tab2[$loop]['salle']!="") {
							// Modif _16 du 20160921 : chgt mot à mot
							//$title.="En salle ".$tab2[$loop]['salle'];
							$title.="Lieu : ".$tab2[$loop]['salle'];
							// Fin modif
						}
						// Modif _15 du 20160124 par P.Aldebert : rajouter la partie de classe concernée
						if($tab2[$loop]['partie']!="") {
							$title.=" partie de classe ".$tab2[$loop]['partie'];
						}
						// Fin modif
						// Modif _15 du 20160126 par P.Aldebert : mettre les vrais horaires
						//$title.="\nDe ".$tab2[$loop]['horaire_debut']." à ".$tab2[$loop]['horaire_fin'].".";
						$title.="\nDe ".$wz[$tab2[$loop]['horaire_debut']]." à ".$wz[$tab2[$loop]['horaire_fin']].".";
						// Fin modif

						$id_cours_courant=$tab2[$loop]['id_cours'];
						// Modif _16 du 20161111 par P.Aldebert : pour les profils CPE et admin, donner l'id_groupe s'il n'est pas nul
						// et donner la mention_eve si elle n'est pas vide
						if (($id_groupe_courant!=0)&&(($_SESSION['statut']=='cpe')||($_SESSION['statut']=='administrateur')||($_SESSION['statut']=='scolarite'))) {
							$title.="\nGroupe : ".$id_groupe_courant;
						}
						if (($mention_eve!="")&&(($_SESSION['statut']=='cpe')||($_SESSION['statut']=='administrateur')||($_SESSION['statut']=='scolarite'))) {
							$title.="\nMention : ".$mention_eve;
						}
						if (($_SESSION['statut']=='administrateur')||($_SESSION['statut']=='cpe')) {
							$title.="\nPavé : ".$id_cours_courant;
						}
						// Fin modif
						// CARACTERISTIQUES DE LA CELLULE
						$x_courant=$x_jour[$num_jour]+$marge_secu;
						$largeur_courante=$largeur_jour-2*$marge_secu;
						$text_color="";
						$font_size="";

						$style_font_size1=" style='font-size:normal;'";
						$style_font_size2=" style='font-size:x-small;'";

						$contenu_courant_ajout="";
						
						// Modif _16 du 20161122 par P.Aldebert : dans ce qui suit, on ne conserve que la matière (au maximum)
						$mitte=$tab2[$loop]['matiere']['matiere'];
						$mitte=substr($mitte,0,1);
						//$contenu_courant="<span style='font-size:xx-small;'>".$tab2[$loop]['matiere']['matiere']."</span>";
						// Modif_16 du 20161208 par P.Aldebert : enrichissement de ce qui est transmis à edt_chgt
						$allea=$_SESSION['gepi_alea'];
						//$contenu_courant="<span style='font-size:xx-small;'>".$mitte."<a href='../edt/edt_chgt.php?mode=salle&amp;id_enreg=".$id_cours_courant."'>*</a></span>";
						$contenu_courant="<span style='font-size:xx-small;'>".$mitte."<a href='../edt/edt_chgt.php?login_prof=".$login_prof."&amp;num_semaine_annee=".$num_semaine_annee."&amp;crsf_alea=".$allea."&amp;type_edt=".$type_edt."&amp;mode_edt=afficher_edt&amp;mode=salle&amp;id_enreg=".$id_cours_courant."'>*</a></span>";
						// Fin modif
						/*
						// Ne pas inclure ce qui suit pour l'emploi du temps du prof
						if($type_edt!="prof") {
							$contenu_courant.="<br /><span$style_font_size2 title=\"".$tab2[$loop]['prof']['designation']."\">".$tab2[$loop]['prof']['nom']."</span>";
						}
						else {
							$contenu_courant.="<br /><span$style_font_size2 title=\"".$liste_classe."\">".$liste_classe."</span>";
						}
						// Ne pas inclure ce qui suit pour l'emploi du temps d'une salle
						$contenu_courant.="<br /><span$style_font_size2 title=\"Salle ".$tab2[$loop]['salle']."\">".$tab2[$loop]['salle']."</span>";

						if($debug_edt=="y") {
							$contenu_courant.="<br />id_cours=".$id_cours_courant;
						}

						$contenu_courant.=$contenu_courant_ajout;
						*/
						// Fin modif

						// Fond blanc pour masquer les lignes d'heures/créneaux
						$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; background-color:white; z-index:18; '></div>";
						// Cadre de couleur avec une opacité réglable
						if(!isset($tab_couleur_matiere[$tab2[$loop]['matiere']['matiere']])) {
							$tab_couleur_matiere[$tab2[$loop]['matiere']['matiere']]=get_couleur_edt_matiere($weise, $tab2[$loop]['matiere']['matiere']);
						}
						// Modif _15 du 20160510 par P.Aldebert : gestion des couleurs étendue						
						// Modif _15 du 20160422 par P.Aldebert : la couleur dépend du type de groupe
						//$couleur_courante=$tab_couleur_matiere[$tab2[$loop]['matiere']['matiere']];
						$hilff=get_supp($id_groupe_courant,$mention_eve);
						$couleur_courante=$hilff['barva'];
						if($hilff['ratio']!="") {
							$title=$hilff['ratio'];
						}
						// Fin modif
						
						$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; border:1px solid black; background-color:".$couleur_courante."; opacity:$opacity_couleur; z-index:19; text-align:center;".$text_color.$font_size."' title='$title'></div>";

						// Cadre du contenu de la cellule
						// Modif _16 du 20161122 par P.Aldebert : simplification de ce qui est affiché
						//$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; border:1px solid black; z-index:20; text-align:center; overflow:hidden; ".$text_color.$font_size."' title='$title'>".$contenu_courant."</div>";
						$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; border:1px solid black; z-index:20; text-align:center; overflow:hidden; ".$text_color.$font_size.">".$contenu_courant."</div>";
					//}

				}
			}
			

			//=================================================================================
			//=================================================================================

			// Modif _16 du 20161210 par P.Aldebert: AJOUT DES HAMECONS pour les cours réellement supplémentaires
			// EXCLUSIVEMENT MINI EDT DDE TYPE PROF : ON NE SE SOUCIE PAS DES COLLISIONS (COMPATIBLE ELEVE AUSSI)

			foreach($non_cours as $num_jour => $non) {
				foreach($non['y'] as $y_courant => $non2) {
					//var_dump($non2);

					$loop=0;
						
						
						//$hauteur_courante=$non2[$loop]['hauteur'];
						$hauteur_courante=$non2[$loop]['hauteur']-$marge_secu;

						// CARACTERISTIQUES DE LA CELLULE
						$x_courant=$x_jour[$num_jour]+$marge_secu;
						$largeur_courante=$largeur_jour-2*$marge_secu;
						$text_color="";
						$font_size="";

						$style_font_size1=" style='font-size:normal;'";
						$style_font_size2=" style='font-size:x-small;'";

						$contenu_courant_ajout="";
						
						// Modif_16 du 20161208 par P.Aldebert : enrichissement de ce qui est transmis à edt_chgt
						$allea=$_SESSION['gepi_alea'];
						$contenu_courant="<span style='font-size:xx-small;'><a href='../edt/edt_chgt.php?login_prof=".$login_prof."&amp;num_semaine_annee=".$num_semaine_annee."&amp;crsf_alea=".$allea."&amp;type_edt=".$type_edt."&amp;mode_edt=afficher_edt&amp;mode=csc&amp;num_jour=".$non2[$loop]['num_jour']."&amp;creneau=".$non2[$loop]['creneau']."&amp;zp_debut=".$non2[$loop]['zp_debut']."&amp;zp_fin=".$non2[$loop]['zp_fin']."'>°</a></span>";
						// Fin modif

						// Fond blanc pour masquer les lignes d'heures/créneaux
						$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; background-color:white; z-index:18; '></div>";
						// Cadre de couleur avec une opacité réglable
						$couleur_courante="white";
						
						//$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; border:1px solid black; background-color:".$couleur_courante."; opacity:$opacity_couleur; z-index:19; text-align:center;".$text_color.$font_size."' title='$title'></div>";

						// Cadre du contenu de la cellule
						// Modif _16 du 20161122 par P.Aldebert : simplification de ce qui est affiché
						//$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; border:1px solid black; z-index:20; text-align:center; overflow:hidden; ".$text_color.$font_size."' title='$title'>".$contenu_courant."</div>";
						$html.="<div style='position:absolute; top:".$y_courant."px; left:".$x_courant."px; width:".$largeur_courante."px; height:".$hauteur_courante."px; border:1px solid white; z-index:20; text-align:center; overflow:hidden; ".$text_color.$font_size.">".$contenu_courant."</div>";
					//}

				}
			}
			
			// Fin modif

			$html.="</div>";
		}
	}
	// Fin modif
	return $html;
}


// Fournit la couleur (barva) et le texte (ratio) 
function get_supp($id_groupe_courant,$mention_eve) {
	global $bv;
	global $txx;
	global $lie;
	//var_dump($id_groupe_courant);
	//var_dump($mention_eve);
	if ($id_groupe_courant==0) {
		$couleur_courante=$bv['e'];
		$temp['ratio']="";
	} 
	elseif ($mention_eve=="" ){
		// Cours normal ou cours dont l'effectif est imprévisible: soutien, certains clubs....
		if (are_pupils($id_groupe_courant)) {
			$couleur_courante=$bv['n'];;
		} 
		else {
			$couleur_courante=$bv['i'];
		}
		$temp['ratio']="";
	}
	else {
		$hil=substr($mention_eve,0,1);
		$couleur_courante=$bv[$hil];
		$temp['ratio']=$txx[$hil];
		$id_eve=substr($mention_eve,2);
		$sql="SELECT titre FROM abs_prof WHERE id='".$id_eve."'";
		$exec=sql_query($sql);
		if(!$exec) {die("Erreur à l'exécution de : ".$sql);}
		if(mysqli_num_rows($exec)!=1) {die("Erreur de nombre pour : ".$sql);}
		// Modif _16 du 20161109 par P. Aldebert : cas particulier de certains textes qui ne sont pas à afficher
		$tup_eve=substr($mention_eve,0,1);
		if ($tup_eve=='a') {
			$alk='absence';
		} else if ($tup_eve=='o') {
			$alk='cours ou surveillance';
		} else {
			$alk=old_mysql_result($exec,0,'titre');
		}
		$sql="SELECT login FROM j_eve_profs WHERE id_eve='".$id_eve."'";
		$exec=sql_query($sql);
		if(!$exec) {die("Erreur à l'exécution de : ".$sql);}
		$az_lehrer=mysqli_num_rows($exec);
		if($az_lehrer==0) {die("Erreur de nombre pour : ".$sql);}
		$ch_affiche="";
		for ($zy=0;$zy<$az_lehrer;$zy++) {
			$ch_affiche.=civ_nom_prenom(old_mysql_result($exec,$zy,'login')).",";
		}
		$ch_affiche=substr($ch_affiche,0,mb_strlen($ch_affiche)-1);
		$temp['ratio'].=$alk.$lie[$hil].$ch_affiche;
	}
	$temp['barva']=$couleur_courante;
	return $temp;
}

// Modif _16 du 20161114 par P.Aldebert : création zus : Zeitumstellung
function zus ($tmp_ts_debut) {
	// Déterminer le décalage horaire 
	$annee_courante=strftime("%Y", $tmp_ts_debut);
	$mois_courant=strftime("%m", $tmp_ts_debut);
	$jour_courant=strftime("%d", $tmp_ts_debut);
	if(($mois_courant>10)||($mois_courant<3)) {
		$decalage_horaire=1*3600;
	}
	elseif(($mois_courant>3)&&($mois_courant<10)) {
		$decalage_horaire=2*3600;
	}
	elseif($mois_courant==3) {
		if(!isset($num_dernier_dimanche[$annee_courante][$mois_courant])) {
			$num_dernier_dimanche[$annee_courante][$mois_courant]=get_dernier_dimanche_du_mois($mois_courant, $annee_courante);
		}
		if($jour_courant>=$num_dernier_dimanche[$annee_courante][$mois_courant]) {
			$decalage_horaire=2*3600;
		}
		else {
			$decalage_horaire=1*3600;
		}
	}
	elseif($mois_courant==10) {
		if(!isset($num_dernier_dimanche[$annee_courante][$mois_courant])) {
			$num_dernier_dimanche[$annee_courante][$mois_courant]=get_dernier_dimanche_du_mois($mois_courant, $annee_courante);
		}
		if($jour_courant>=$num_dernier_dimanche[$annee_courante][$mois_courant]) {
			$decalage_horaire=1*3600;
		}
		else {
			$decalage_horaire=2*3600;
		}
	}
	return $decalage_horaire;	
}
// Fin modif
			
// Fournit la matière Gepi d'un pavé
// En entrée $id, le n°
function mat_gepi($id) {
	// Par défaut
	$antw="";
	$sql9="SELECT jgm.id_matiere FROM edt_ics ei, j_groupes_matieres jgm
	WHERE ei.id='".$id."' 
	AND ei.id_groupe=jgm.id_groupe 
	";
	$exec9=sql_query($sql9);
	if (!$exec9) { die("Erreur à l'exécution de : ".$sql9); }
	$nb9=mysqli_num_rows($exec9);
	if ($nb9>0) {
		$antw=old_mysql_result($exec9,0,'jgm.id_matiere');
	}
	return $antw;
}

// Modif _16 du 20161231 par P.Aldebert
// Donne, pour un jour où le LFA est ouvert, le créneau horaire "Hn" correspondant à un GDH donné
function get_ha($gdh) {

	// Par défaut
	$ha="-";
	// On ne se pose la question que si c'est un jour d'ouverture
	if(lfa_ouvert($gdh)) {
		
		$h=substr($gdh,11);
		// Chercher les créneaéux
		$sql9="SELECT * FROM edt_creneaux 
		ORDER BY heuredebut_definie_periode";
		$exec9=sql_query($sql9);
		if (!$exec9) { die("Erreur à l'exécution de : ".$sql9); }
		$nb9=mysqli_num_rows($exec9);

		for ($i=0;$i<$nb9;$i++){
			$deb_creneau=old_mysql_result($exec9,$i,'heuredebut_definie_periode');
			$fin_creneau=old_mysql_result($exec9,$i,'heurefin_definie_periode');
			// Le gdh est-il a l'intérieur d'un créneau?
			if (($h>$deb_creneau)&&($h<=$fin_creneau)) {
				$ha=old_mysql_result($exec9,$i,'nom_definie_periode');
			}
		}
		
	}
	return $ha;
} 

// Modif _16 du 20161102 par P.Aldebert
// Donne à l'aide d'un logique si l'établissement est ouvert ou non
// En entrée une gdh au format sql
function lfa_ouvert($gdh) {

	// Par défaut
	$etat=True;
	// Chercher les périodes de fermeture
	$sql9="SELECT * FROM edt_calendrier WHERE etabferme_calendrier='2'
	ORDER BY debut_calendrier_ts";
	$exec9=sql_query($sql9);
	if (!$exec9) { die("Erreur à l'exécution de : ".$sql9); }
	$nb9=mysqli_num_rows($exec9);
	if ($nb9>0) {
		for ($i=0;$i<$nb9;$i++){
			$deb_creneau=old_mysql_result($exec9,$i,'jourdebut_calendrier')." ".old_mysql_result($exec9,$i,'heuredebut_calendrier');
			$fin_creneau=old_mysql_result($exec9,$i,'jourfin_calendrier')." ".old_mysql_result($exec9,$i,'heurefin_calendrier');
			// Le gdh est-il a l'intérieur d'un créneau?
			if (($gdh>$deb_creneau)&&($gdh<$fin_creneau)) {
				$etat=False;
			}
		}
	}
	return $etat;
} 

// Modif _16 du 20160923 par P.Aldebert
// Donne le numero de période "officiel" 
// En entrée id_classe et un gdh
function get_periode($id,$zeitpunkt) {				
				$id_classe=$id;
				include("../lib/periodes.inc.php");
				// Pour les terminales franco-allemandes, on a pris la précaution de mettre la fin du deuxième trimestre à la fermeture de juillet
				// Chercher le num periode officiel pour cette date_debut
				$k=1;
				while ($date_fin_periode[$k]<=$zeitpunkt) {
					$k++;
				}
				$zz=$k;
				return $zz;
}

// Modif _16 du 20160920 par P.Aldebert
// Donne le numero_salle pour une salle_ics si elle est déjà enregistrée dans edt_ics_salle
// En entrée la salle_ics brute issue du fichier .ics
function donne_numero_salle($salle_ics) {
	// Par défaut
	$antw=$salle_ics;
	$sql9="SELECT numero_salle FROM edt_ics_salle
	WHERE salle_ics='".$salle_ics."' ";
	$exec9=sql_query($sql9);
	if (!$exec9) { die("Erreur à l'exécution de : ".$sql9); }
	$nb9=mysqli_num_rows($exec9);
	if ($nb9>0) {
		$antw=old_mysql_result($exec9,0,'numero_salle');
	}
	return $antw;
}
// Fin modif

// Modif _16 du 20160922 par P.Aldebert
// fournit une chaîne salle_ics débarrassée des éventuels underscore
// En entrée la salle_ics, éventuellement multiple
// En sortie la salle_ics sans underscore
function epluche_under($salle_ics) {
	
	unset($tab);
	$tab=array();
	$tab=explode(";",$salle_ics);
	$antw="";
	for ($i=0;$i<count($tab);$i++) {
		if(substr($tab[$i],0,1)=='_') {
			// Ne pas remettre l'underscore
			$antw.=substr($tab[$i],1,mb_strlen($tab[$i])-1);
		} else {
			$antw.=$tab[$i];
		}
		$antw.=";";
	}
	// retirer le dernier ";"
	$antw=substr($antw,0,mb_strlen($antw)-1);
	
	return $antw;
	
}
// Fin modif


// Modif _16 du 20160920 par P.Aldebert
// Fournit le numero_salle pour une salle_ics si elle est déjà enregistrée dans edt_ics_salle
// En entrée l'id_salle de la table 
function fournit_numero_salle($id_salle) {
	// Par défaut
	$antw="";
	$sql9="SELECT numero_salle FROM salle_cours
	WHERE id_salle='".$id_salle."' ";
	$exec9=sql_query($sql9);
	if (!$exec9) { die("Erreur à l'exécution de : ".$sql9); }
	$nb9=mysqli_num_rows($exec9);
	if ($nb9>0) {
		$antw=old_mysql_result($exec9,0,'numero_salle');
	}
	return $antw;
}
// Fin modif


// Modif _16 du 20160923 par P.Aldebert
// Indique si le groupe (ou plutôt un des ses jgc) a un categorie_id qui fait qu'il fonctionne suivant la periode unique
// En entrée l'id du groupe
function is_gris_eps($id_groupe) {
	global $categorie_id_spe;
	// Par défaut
	$antw=False;;
	$sql9="SELECT DISTINCT categorie_id FROM j_groupes_classes 
	WHERE id_groupe='".$id_groupe."' ";
	$exec9=sql_query($sql9);
	if (!$exec9) { die("Erreur à l'exécution de : ".$sql9); }
	$nb9=mysqli_num_rows($exec9);
	if ($nb9==1) {
		$categ=old_mysql_result($exec9,0,'categorie_id');
		if ($categ==$categorie_id_spe) {
			$antw=True;
		}
	}
	return $antw;
}
// Fin modif

// Modif _16 du 20161124 par P.Aldebert : fournit les détails de la classe ics d'un pavé 
// id : le numéro de pave
function details_ci_from_pav($id){
	unset ($tabelle);
	// Valeur par défaut
	$tabelle=array();
	
	// Détails du pavé
	$pav=get_pav($id);
	
	// On s'intéresse à classe_ics
	$classe_ics=$pav['classe_ics'];
	if ($classe_ics!="") {
		$tabelle['barva']=substr($classe_ics,0,1);
		$tabelle['id_eve']=substr($classe_ics,2);
	} else {
		$tabelle['barva']="";
		$tabelle['id_eve']=0;
	}
	
	return $tabelle;
}
	


// Modif _16 du 20160920 par P.Aldebert
// Fournit le premier prof_ics pour un login de prof si il est déjà enregistré dans edt_ics_prof
// En entrée l'id_salle de la table 
function prof_ics_from_login($login) {
	// Par défaut
	$antw="";
	$sql9="SELECT prof_ics FROM edt_ics_prof
	WHERE login_prof='".$login."' ";
	$exec9=sql_query($sql9);
	if (!$exec9) { die("Erreur à l'exécution de : ".$sql9); }
	$nb9=mysqli_num_rows($exec9);
	if ($nb9>0) {
		// On prend le premier qui se présente
		$antw=old_mysql_result($exec9,0,'prof_ics');
	}
	return $antw;
}
// Fin modif

// Modif _15 du 20160528 par P.Aldebert: création; fournit un caractéristique d'un évènement:
// Sachant que c'est exclusif:
// En entrant un numéro d'évènement
// S'il y a des lignes dans j_eve_classes: valeur 'c'
// S'il y a des lignes dans j_eve_groupes: valeur 'g'
// Dans aucun des 2: le défaut, valeur 'n'
function schar($id) {

	// Réponse par défaut
	$antw='n';
	
	// Classes
	$sql9="SELECT c.classe FROM j_eve_classes jvc, classes c
	WHERE c.id=jvc.id_classe 
	AND jvc.id_eve='".$id."' 
	";
	$exec9=sql_query($sql9);
	if (!$exec9) { die("Erreur à l'exécution de : ".$sql9); }
	$nb9=mysqli_num_rows($exec9);
	if($nb9!=0) {
		$antw='c';
	}
	
	// Groupes
	$sql8="SELECT jvg.id_groupe FROM j_eve_groupes jvg, groupes g
	WHERE g.id=jvg.id_groupe 
	AND jvg.id_eve='".$id."' 
	";
	$exec8=sql_query($sql8);
	if (!$exec8) { die("Erreur à l'exécution de : ".$sql8); }
	$nb8=mysqli_num_rows($exec8);
	if($nb8!=0) {
		$antw='g';
	}
	
	return $antw;
}

// Modif _16 du 20161123 par P.Aldebert : sépare un pavé et ses clones en deux
// id : numéro d'enregistrement
function separ_pav($id) {

	$msg="";
	
	// Déjà, il faut que le pavé soit séparable; s'il l'est, ses clones le sont
	if(elig_separ($id)) {
		$clones=get_clones($id);
		
		// Boucler sur les clones
		for ($k=0;$k<count($clones);$k++) {
			$pav=get_pav($clones[$k]);
			unset($anfang);
			unset($ende);
			$anfang=array();
			$ende=array();
			// Calcul des caractéristiques de temps des deux nouveaux pavés
			$anfang[0]=$pav['date_debut'];
			$ende[0]=rehausse_fin($pav['date_fin']);
			$anfang[1]=rabaisse_debut($pav['date_debut']);
			$ende[1]=$pav['date_fin'];
			// Boucler sur les deux enregistrements
			for ($j=0;$j<2;$j++) {
			
				// Enregistrements 1 et 2, à la fois dans edt_ics et dans edt_ics_base
				
				$sql="INSERT into edt_ics SET 
					id_classe='".$pav['id_classe']."',
					id_groupe='".$pav['id_groupe']."',
					classe_ics='".$pav['classe_ics']."',
					prof_ics='".$pav['prof_ics']."',
					matiere_ics='".$pav['matiere_ics']."',
					salle_ics='".$pav['salle_ics']."',
					partie_ics='".$pav['partie_ics']."',
					num_semaine='".$pav['num_semaine']."',
					jour_semaine='".$pav['jour_semaine']."',
					annee='".$pav['annee']."',
					date_debut='".$anfang[$j]."',
					date_fin='".$ende[$j]."',
					description='".$pav['description']."',
					qu='".$pav['qu']."'
					";
				$ins=mysqli_query($GLOBALS["mysqli"], $sql);
				if (!$ins) {die("Erreur à l'exécution de : ".$sql);}
				$neu_enreg=mysqli_insert_id($GLOBALS["mysqli"]);
				$sql="INSERT into edt_ics_base SET 
					id='".$neu_enreg."',
					id_classe='".$pav['id_classe']."',
					id_groupe='".$pav['id_groupe']."',
					classe_ics='".$pav['classe_ics']."',
					prof_ics='".$pav['prof_ics']."',
					matiere_ics='".$pav['matiere_ics']."',
					salle_ics='".$pav['salle_ics']."',
					partie_ics='".$pav['partie_ics']."',
					num_semaine='".$pav['num_semaine']."',
					jour_semaine='".$pav['jour_semaine']."',
					annee='".$pav['annee']."',
					date_debut='".$anfang[$j]."',
					date_fin='".$ende[$j]."',
					description='".$pav['description']."',
					qu='".$pav['qu']."'
					";
				$ins=mysqli_query($GLOBALS["mysqli"], $sql);
				if (!$ins) {die("Erreur à l'exécution de : ".$sql);}
				$msg.="Nouveau pavé créé n° ".$neu_enreg."<br />";
			}
			// Destruction de l'ancien enregistrement, à la fois dans edt_ics et dans edt_ics_base
			$sql="DELETE ei.* FROM edt_ics ei WHERE ei.id='".$clones[$k]."'";
			$del=sql_query($sql);
			if (!$del) {die("Erreur à l'exécution de : ".$sql);}
			$sql="DELETE ei.* FROM edt_ics_base ei WHERE ei.id='".$clones[$k]."'";
			$del=sql_query($sql);
			if (!$del) {die("Erreur à l'exécution de : ".$sql);}
			$msg.="Pavé n° ".$clones[$k]." détruit.<br />";
			// Modif _16 du 20161208 par P.Aldebert : on resume par "ok" quand tout s'est bien passé
			$msg="ok";
		}
		
	} else {
		$msg.="Vous essayez de séparer un pavé qui n'est pas séparable.<br />";
	}
	return $msg;
}

// Modif _16 du 20161123 par P.Aldebert : sépare un pavé, mais on ne touche pas à ses clones
// id : numéro d'enregistrement
function separ_pav_unique($id) {

	$msg="";
	
	// Déjà, il faut que le pavé soit séparable
	if(elig_separ($id)) {
		$clones=array();
		// Le pavé n'a que lui comme clone
		$clones[]=$id;
		
		// Boucler sur les clones
		for ($k=0;$k<count($clones);$k++) {
			$pav=get_pav($clones[$k]);
			unset($anfang);
			unset($ende);
			$anfang=array();
			$ende=array();
			// Calcul des caractéristiques de temps des deux nouveaux pavés
			$anfang[0]=$pav['date_debut'];
			$ende[0]=rehausse_fin($pav['date_fin']);
			$anfang[1]=rabaisse_debut($pav['date_debut']);
			$ende[1]=$pav['date_fin'];
			// Boucler sur les deux enregistrements
			for ($j=0;$j<2;$j++) {
			
				// Enregistrements 1 et 2, à la fois dans edt_ics et dans edt_ics_base
				
				$sql="INSERT into edt_ics SET 
					id_classe='".$pav['id_classe']."',
					id_groupe='".$pav['id_groupe']."',
					classe_ics='".$pav['classe_ics']."',
					prof_ics='".$pav['prof_ics']."',
					matiere_ics='".$pav['matiere_ics']."',
					salle_ics='".$pav['salle_ics']."',
					partie_ics='".$pav['partie_ics']."',
					num_semaine='".$pav['num_semaine']."',
					jour_semaine='".$pav['jour_semaine']."',
					annee='".$pav['annee']."',
					date_debut='".$anfang[$j]."',
					date_fin='".$ende[$j]."',
					description='".$pav['description']."',
					qu='".$pav['qu']."'
					";
				$ins=mysqli_query($GLOBALS["mysqli"], $sql);
				if (!$ins) {die("Erreur à l'exécution de : ".$sql);}
				$neu_enreg=mysqli_insert_id($GLOBALS["mysqli"]);
				$sql="INSERT into edt_ics_base SET 
					id='".$neu_enreg."',
					id_classe='".$pav['id_classe']."',
					id_groupe='".$pav['id_groupe']."',
					classe_ics='".$pav['classe_ics']."',
					prof_ics='".$pav['prof_ics']."',
					matiere_ics='".$pav['matiere_ics']."',
					salle_ics='".$pav['salle_ics']."',
					partie_ics='".$pav['partie_ics']."',
					num_semaine='".$pav['num_semaine']."',
					jour_semaine='".$pav['jour_semaine']."',
					annee='".$pav['annee']."',
					date_debut='".$anfang[$j]."',
					date_fin='".$ende[$j]."',
					description='".$pav['description']."',
					qu='".$pav['qu']."'
					";
				$ins=mysqli_query($GLOBALS["mysqli"], $sql);
				if (!$ins) {die("Erreur à l'exécution de : ".$sql);}
				$msg.="Nouveau pavé créé n° ".$neu_enreg."<br />";
			}
			// Destruction de l'ancien enregistrement, à la fois dans edt_ics et dans edt_ics_base
			$sql="DELETE ei.* FROM edt_ics ei WHERE ei.id='".$clones[$k]."'";
			$del=sql_query($sql);
			if (!$del) {die("Erreur à l'exécution de : ".$sql);}
			$sql="DELETE ei.* FROM edt_ics_base ei WHERE ei.id='".$clones[$k]."'";
			$del=sql_query($sql);
			if (!$del) {die("Erreur à l'exécution de : ".$sql);}
			$msg.="Pavé n° ".$clones[$k]." détruit.<br />";
			// Modif _16 du 20161208 par P.Aldebert : on resume par "ok" quand tout s'est bien passé
			$msg="ok";
		}
		
	} else {
		$msg.="Vous essayez de séparer un pavé qui n'est pas séparable.<br />";
	}
	return $msg;
}
		
// Modif _16 du 20161123 par P.Aldebert : teste si un pavé de cours est séparable en deux
// id : numéro d'enregistrement
function elig_separ($id) {

	// Par défaut 
	$antw=False;
	
	$pav=get_pav($id);
	
	// Calculer la prétention à être coupé en deux
	$debut=$pav['date_debut'];
	$fin=$pav['date_fin'];
	$neu_debut=rabaisse_debut($debut);
	$neu_fin=rehausse_fin($fin);
	$temoin=strtotime($neu_debut)-strtotime($neu_fin);
	// Pour les pavés de 2 heures , le témoin va de 300 (pour la plupart) à 1200 (H2-H3)
	// Pour les pavés de 1 heure , le témoin débute à 2700
	if ($temoin<1300) {
		$antw=True;
	}
	
	return $antw;

}


// Modif _16 du 20161208 par P.Aldebert : donne tous les pavés de cours d'un professeur le même jour qu'un enregistrement donné
// id : numéro d'enregistrement; $login_prof : on est obligé de prendre $login_prof à cause des fantaisies dans $prof_ics
function get_cousins($id,$login_prof) {

	// Par défaut 
	unset ($antw);
	$antw=array();
	
	$pav=get_pav($id);
	
	// Calculer la prétention à être au sein d'un EDT de prof ce jour_là
	$num_semaine=$pav['num_semaine'];
	$jour_semaine=$pav['jour_semaine'];
	
	$sql="SELECT DISTINCT ei.id FROM edt_ics ei, edt_ics_prof eip 
	WHERE ei.prof_ics=eip.prof_ics AND 
	eip.login_prof='".$login_prof."' AND 
	ei.num_semaine='".$num_semaine."' AND 
	ei.jour_semaine='".$jour_semaine."'
	";
	$exec=sql_query($sql);
	if (!$exec) { die("Erreur à l'exécution de : ".$sql); }
	$nb_enr=mysqli_num_rows($exec);
	if ($nb_enr==0) { die("Erreur de nombre pour : ".$sql); }
	// Charger les cousins
	for ($i=0;$i<$nb_enr;$i++) {
		$antw[]=old_mysql_result($exec,$i,'id');
	}
	
	return $antw;

}

// Modif _16 du 20161208 par P.Aldebert : teste si un pavé de cours est au sein d'une journée de prof qui n'a que des pavés azure ou jaune
// id : numéro d'enregistrement; $login_prof : on est obligé de prendre $login_prof à cause des fantaisies dans $prof_ics
function elig_total($id,$login_prof) {
	// On est obligé de prendre $login_prof à cause des fantaisies dans $prof_ics

	// Par défaut 
	$antw=True;

	$tab_cousins=get_cousins($id,$login_prof);
	
	if (!empty($tab_cousins)) {
		for ($i=0;$i<count($tab_cousins);$i++) {
			$id_courant=$tab_cousins[$i];
			$pfl=get_pav($id_courant);
			$classe_ics=$pfl['classe_ics'];
			if ($classe_ics!="") {
				$antw=False;
			}
		}
	}

	
	return $antw;

}

// Modif _16 du 20161112 par P.Aldebert : donne,pour un gdh donné la date creneau le plus tôt en heures vraies (pour la table abs_prof) le même jour
function debut_travail ($gdh) {
	// Extraire  d 
	$d=substr($gdh,0,10);
	// Valeur par défaut
	$antw=$d." 00:00:00";
	// Repérer le h dans la grille des creneaux
	$sql="SELECT * FROM edt_creneaux ORDER BY heuredebut_definie_periode";
	$exec=sql_query($sql);
	if (!$exec) { die("Erreur à l'exécution de : ".$sql); }
	// Le premier créneau
	$h=old_mysql_result($exec,0,'heuredebut_definie_periode');
	//
	$antw=$d." ".$h;
	
	return $antw;

}

// Modif _16 du 20161112 par P.Aldebert : donne,pour un gdh donné la date creneau le plus tard en heures vraies (pour la table abs_prof) le même jour
function fin_travail ($gdh) {
	// Extraire  d 
	$d=substr($gdh,0,10);
	// Valeur par défaut
	$antw=$d." 23:59:00";
	// Repérer le h dans la grille des creneaux
	$sql="SELECT * FROM edt_creneaux ORDER BY heurefin_definie_periode DESC";
	$exec=sql_query($sql);
	if (!$exec) { die("Erreur à l'exécution de : ".$sql); }
	// Le dernier créneau
	$h=old_mysql_result($exec,0,'heurefin_definie_periode');
	//
	$antw=$d." ".$h;

	return $antw;

}


// Modif _16 du 20161112 par P.Aldebert : donne, dans les creneaux classiques, la date de départ du creneau plus tard
function rabaisse_debut ($gdh) {
	// Revenir à un gdh réelle
	$gdhw=vdwa($gdh);
	// Decomposer d et h
	$d=substr($gdhw,0,10);
	$h=substr($gdhw,11);
	// Valeur par défaut
	$antw=$d." 23:59:57";
	// Repérer le h dans la grille des creneaux
	$sql="SELECT * FROM edt_creneaux WHERE heuredebut_definie_periode='".$h."'";
	$exec=sql_query($sql);
	if (!$exec) { die("Erreur à l'exécution de : ".$sql); }
	$nb1=mysqli_num_rows($exec);
	// Modif _16 du 20161213 par P.Aldebert : tenir compte des horaires demie, pouyr lesquels on va donner la réponse par défaut mais on ne va pas planter
	//if($nb1!=1) { die("Erreur de nombre pour : ".$sql); }
	if ($nb1==1) {
		// Fin modif
		$num=old_mysql_result($exec,0,'id_definie_periode');
		// Décaler vers le tard
		$neu_num=$num+1;
		// Prendre la date de départ du créneau suivant
		$sql="SELECT * FROM edt_creneaux WHERE id_definie_periode='".$neu_num."'";
		$exec=sql_query($sql);
		if (!$exec) { die("Erreur à l'exécution de : ".$sql); }
		$nb1=mysqli_num_rows($exec);
		// On garde la valeur par défaut si on a cherché à rabaisser la première date de début
		if($nb1==1) {
			$neu_h=old_mysql_result($exec,0,'heuredebut_definie_periode');
			$antw=$d." ".$neu_h;
			// Décaler w->d
			$antw=vwda($antw);
		}		
	}
	
	return $antw;

}

// Modif _16 du 20161112 par P.Aldebert : donne, dans les creneaux classiques, la date de fin du creneau plus tôt
function rehausse_fin ($gdh) {
	// Revenir à un gdh réelle
	$gdhw=vdwe($gdh);
	// Decomposer d et h
	$d=substr($gdhw,0,10);
	$h=substr($gdhw,11);
	// Valeur par défaut
	$antw=$d." 00:00:00";
	// Repérer le h dans la grille des creneaux
	$sql="SELECT * FROM edt_creneaux WHERE heurefin_definie_periode='".$h."'";
	$exec=sql_query($sql);
	if (!$exec) { die("Erreur à l'exécution de : ".$sql); }
	$nb1=mysqli_num_rows($exec);
	// Modif _16 du 20161213 par P.Aldebert : tenir compte des horaires demie, pouyr lesquels on va donner la réponse par défaut mais on ne va pas planter
	//if($nb1!=1) { die("Erreur de nombre pour : ".$sql); }
	if($nb1==1) {
		// Fin modif
		$num=old_mysql_result($exec,0,'id_definie_periode');
		// Décaler vers le tôt
		$neu_num=$num-1;
		// Prendre la date de départ du créneau suivant
		$sql2="SELECT * FROM edt_creneaux WHERE id_definie_periode='".$neu_num."'";
		$exec=sql_query($sql2);
		if (!$exec) { die("Erreur à l'exécution de : ".$sql2); }
		$nb1=mysqli_num_rows($exec);
		// On garde la valeur par défaut si on a cherché à réhausser la première date de fin
		if($nb1==1) {
			$neu_h=old_mysql_result($exec,0,'heurefin_definie_periode');
			$antw=$d." ".$neu_h;
			// Décaler w->d
			$antw=vwde($antw);
		}
	}
	
	return $antw;

}

// Modif _16 du 20161112 par P.Aldebert : vwda (Verschiebung: Wirklichkeit->Datensatz für den Anfang) decale un gdh de debut
function vwda($gdh) {
	global $decalage_debut;

	$ts_debut=strtotime($gdh)+$decalage_debut;
	$neu_gdh=strftime("%Y-%m-%d %H:%M:%S", $ts_debut);
	
	return $neu_gdh;
}

// Fin modif

// Modif _16 du 20161112 par P.Aldebert : vdwa (Verschiebung: Datensatz->Wirklichkeit für den Anfang) decale un gdh de debut
function vdwa($gdh) {
	global $decalage_debut;

	$ts_debut=strtotime($gdh)-$decalage_debut;
	$neu_gdh=strftime("%Y-%m-%d %H:%M:%S", $ts_debut);
	
	return $neu_gdh;
}
// Fin modif

// Modif _16 du 20161112 par P.Aldebert : vwda (Verschiebung: Wirklichkeit->Datensatz für das Ende) decale un gdh de fin
function vdwe($gdh) {
	global $decalage_fin;

	$ts_fin=strtotime($gdh)-$decalage_fin;
	$neu_gdh=strftime("%Y-%m-%d %H:%M:%S", $ts_fin);
	
	return $neu_gdh;
}

// Fin modif
// Modif _16 du 20161112 par P.Aldebert : vwda (Verschiebung: Wirklichkeit->Datensatz für das Ende) decale un gdh de fin
function vwde($gdh) {
	global $decalage_fin;

	$ts_fin=strtotime($gdh)+$decalage_fin;
	$neu_gdh=strftime("%Y-%m-%d %H:%M:%S", $ts_fin);
	
	return $neu_gdh;
}
// Fin modif

// Modif _17 du 20170910 par P. Aldebert : limitation des clones dans le cas où le login_prof est fourni
// Modif _16 du 20161122 par P.Aldebert : donne les caractéristiques les autres pavés de même groupe, même date
// La multiplicité peut être due aux classes et au cours en service commun
//function get_clones($id) {
function get_clones($id,$login_prof="") {
	// Réponse par défaut
	unset ($clones);
	$clones=array();
	$pav=get_pav($id);
	if ($login_prof=="") {
		$sql="SELECT DISTINCT id FROM edt_ics WHERE 
		id_groupe='".$pav['id_groupe']."' AND 
		date_debut='".$pav['date_debut']."' AND
		date_fin='".$pav['date_fin']."' 
		";
	} else {
		$sql="SELECT DISTINCT ei.id FROM edt_ics ei, edt_ics_prof eip WHERE 
		ei.id_groupe='".$pav['id_groupe']."' AND 
		ei.date_debut='".$pav['date_debut']."' AND
		ei.date_fin='".$pav['date_fin']."' AND
		ei.prof_ics=eip.prof_ics AND 
		eip.login_prof='".$login_prof."' 
		";
	}
	$exec=sql_query($sql);
	if (!$exec) {die("Erreur à l'exécution de : ".$sql);}
	$nb_pav=mysqli_num_rows($exec);
	for ($i=0;$i<$nb_pav;$i++) {
		$clones[]=old_mysql_result($exec,$i,'id');
	}
	
	return $clones;
}
// Fin modif


// Modif _16 du 20161122 par P.Aldebert : donne les caractéristiques de base d'un pavé
function get_pav($id) {
	// Réponse par défaut
	unset ($tab_pav);
	$tab_pav=array();
	$sql="SELECT * FROM edt_ics WHERE id='".$id."'";
	$exec=sql_query($sql);
	if (!$exec) {die("Erreur à l'exécution de : ".$sql);}
	$nb_pav=mysqli_num_rows($exec);
	if ($nb_pav!=1) {die("Erreur de nombre pour : ".$sql);}
	$tab_pav['id']=old_mysql_result($exec,0,'id');
	$tab_pav['id_groupe']=old_mysql_result($exec,0,'id_groupe');
	$tab_pav['id_classe']=old_mysql_result($exec,0,'id_classe');
	$tab_pav['classe_ics']=old_mysql_result($exec,0,'classe_ics');
	$tab_pav['prof_ics']=old_mysql_result($exec,0,'prof_ics');
	$tab_pav['matiere_ics']=old_mysql_result($exec,0,'matiere_ics');
	$tab_pav['salle_ics']=old_mysql_result($exec,0,'salle_ics');
	$tab_pav['partie_ics']=old_mysql_result($exec,0,'partie_ics');
	$tab_pav['jour_semaine']=old_mysql_result($exec,0,'jour_semaine');
	$tab_pav['num_semaine']=old_mysql_result($exec,0,'num_semaine');
	$tab_pav['annee']=old_mysql_result($exec,0,'annee');
	$tab_pav['date_debut']=old_mysql_result($exec,0,'date_debut');
	$tab_pav['date_fin']=old_mysql_result($exec,0,'date_fin');
	$tab_pav['description']=old_mysql_result($exec,0,'description');
	$tab_pav['qu']=old_mysql_result($exec,0,'qu');
	
	return $tab_pav;
}
// Fin modif


// Modif _16 du 20161112 par P.Aldebert : donne les caractéristiques de base d'un événement
function get_eve($id) {
	// Réponse par défaut
	unset ($tab_eve);
	$tab_eve=array();
	$sql="SELECT * FROM abs_prof WHERE id='".$id."'";
	$exec=sql_query($sql);
	if (!$exec) {die("Erreur à l'exécution de : ".$sql);}
	$nb_eve=mysqli_num_rows($exec);
	if ($nb_eve!=1) {die("Erreur de nombre pour : ".$sql);}
	$tab_eve['id']=old_mysql_result($exec,0,'id');
	$tab_eve['art']=old_mysql_result($exec,0,'art');
	$tab_eve['date_debut']=old_mysql_result($exec,0,'date_debut');
	$tab_eve['date_fin']=old_mysql_result($exec,0,'date_fin');
	$tab_eve['typ_cso']=old_mysql_result($exec,0,'typ_cso');
	$tab_eve['titre']=old_mysql_result($exec,0,'titre');
	$tab_eve['description']=old_mysql_result($exec,0,'description');
	
	return $tab_eve;
}
// Fin modif

// Modif _15 du 20160519 par P.Aldebert : création de la fonction mene
// Donne le ou les responsables des événements
function mene($id_eve) {
	// Réponse par défaut
	unset ($meneur);
	$meneur=array();
	$sql="SELECT login FROM j_eve_profs WHERE id_eve='".$id_eve."'";
	$exec=sql_query($sql);
	if (!$exec) {die("Erreur à l'exécution de : ".$sql);}
	$nb_profs=mysqli_num_rows($exec);
	if ($nb_profs>0) {
		for ($i=0;$i<$nb_profs;$i++) {
			$meneur[$i]=old_mysql_result($exec,$i,'login');
		}
	}
	return ($meneur);
}

// Modif _16 du 20160519 par P.Aldebert : création de la fonction grp
// Donne le ou les groupes des événements
function grpp($id_eve) {
	// Réponse par défaut
	unset ($grps);
	$grps=array();
	$sql="SELECT id_groupe FROM j_eve_groupes WHERE id_eve='".$id_eve."'";
	$exec=sql_query($sql);
	if (!$exec) {die("Erreur à l'exécution de : ".$sql);}
	$nb_grps=mysqli_num_rows($exec);
	if ($nb_grps>0) {
		for ($i=0;$i<$nb_grps;$i++) {
			$grps[$i]=old_mysql_result($exec,$i,'id_groupe');
		}
	} else {
		$grps[0]=0;
	}
	return ($grps);
}

// Modif _16 du 20161109 par P. Aldebert : création; change la salle d'un pavé
// $id : numéro d'évènement
// $id_salle : identifiant de la salle demandée
function impact_chgt_edt($id,$id_salle) {
			
	$msg="";

	// Rechercher les caractéristiques du pavé
	$pav=get_pav($id);	
	
	// Rechercher les clones
	$clones=get_clones($id);
	
	// Regarder si la salle est libre
	// Aller chercher les salles possibles dans edt_ics
	// Rappel : ces salles sont normalisées et sont toutes dans la colonne numero_salle de la table salle_cours
	// On utilise un LIKE à cause des ";"
	// Passer de l'id_salle à numero_salle 
	$numero_salle=get_numero_salle_from_id_salle($id_salle);
	// AD HOC On ne teste pas avec LIKE pour le moment
	$num_like="%".$numero_salle."%";
	// Pouvoir disposer d'inégalités strictes
	$nun_debut=vdwa($pav['date_debut']);
	$nun_fin=vdwe($pav['date_fin']);

	// Expression du cas d'interférence
	$cas_interference_1="( '".$nun_debut."'<ei.date_debut AND  '".$nun_fin."'>ei.date_debut)";
	$cas_interference_2="( '".$nun_debut."'>ei.date_debut AND  '".$nun_debut."'<ei.date_fin)";
	$cas_interference=" ( ".$cas_interference_1.
					" OR "
						.$cas_interference_2." )  
	";

	
	// Compter les pavés pour cette salle , sauf les pavés q,b,f,a 
	$sql="SELECT ei.* FROM edt_ics ei WHERE 
	ei.salle_ics = '".$numero_salle."' AND ".
	$cas_interference." 
	AND ei.classe_ics NOT LIKE 'q%'
	AND ei.classe_ics NOT LIKE 'b%' 
	AND ei.classe_ics NOT LIKE 'f%'
	AND ei.classe_ics NOT LIKE 'a%'
	";
	$exeb=sql_query($sql);
	if (!$exeb) {die("Erreur à l'exécution de : ".$sql);}
	$nb_d=mysqli_num_rows($exeb);
	if ($nb_d!=0) {
		// Modif _16 du 20170121 par P.Aldebert : on tolère la même salle si l'un des deux cours est rouge (classecl_ics=_ics commençant par "o")
		$conflit=True;
		if (substr($pav['classe_ics'],0,1)=='o') {
			$conflit=False;
		} else {
			for ($ye=0;$ye<$nb_d;$ye++) {
				$nom_prof=old_mysql_result($exeb,$ye,'prof_ics');
				$cl_ics=old_mysql_result($exeb,$ye,'classe_ics');
				if(substr($cl_ics,0,1)=='o') {
					$conflit=False;
					break;
				}
			}
		}
		// On a determiné s'il y avait réellement conflit ou non
		if ($conflit) {
			$msg.="Avec<br />";
			$msg.=$nun_debut."<br />";
			$msg.=$nun_fin."<br />";
			$msg.="vous avez indiqué la salle ".$numero_salle ." mais elle n'est pas libre : <br />";
			$msg.="Elle est occupée par le professeur : ".$nom_prof."<br />Veuillez choisir une autre salle.<br />";	
		} else {
			// On s'accomode; on voudrait attirer l'attention
			// Rechercher les clones
			$clones=get_clones($id);
			// Modifier les salles pour les pavés concernés
			for ($k=0;$k<count($clones);$k++) {
				$sql="UPDATE edt_ics 
				SET salle_ics='".$numero_salle."'
				WHERE id='".$clones[$k]."'";
				$exef=sql_query($sql);
				if (!$exef) {die("Erreur à l'exécution de : ".$sql);}
			}
			// Informer du résultat
			for ($k=0;$k<count($clones);$k++) {
				$msg.="Modification de salle faite pour le pavé : ".$clones[$k]."<br />";
			}
			// Modif _16 du 20161208 par P.Aldebert : résultat ok si tout va bien
			$msg="ok";				
		}
	} else {
		// Rechercher les clones
		$clones=get_clones($id);
		// Modifier les salles pour les pavés concernés
		for ($k=0;$k<count($clones);$k++) {
			$sql="UPDATE edt_ics 
			SET salle_ics='".$numero_salle."'
			WHERE id='".$clones[$k]."'";
			$exef=sql_query($sql);
			if (!$exef) {die("Erreur à l'exécution de : ".$sql);}
		}
		// Informer du résultat
		for ($k=0;$k<count($clones);$k++) {
			$msg.="Modification de salle faite pour le pavé : ".$clones[$k]."<br />";
		}
		// Modif _16 du 20161208 par P.Aldebert : résultat ok si tout va bien
		$msg="ok";
	}
	return $msg;

}

// Modif _16 du 20161109 par P. Aldebert : création
// Met à jour une instance de cours, et donc autant de pavé que de classes,
// dans le cas d'un événement de type cso
// $id : numéro d'évènement
function impact_cso_edt($id,$id_salle=0) {
	
	//global $decalage_debut;
	//global $decalage_fin;
	// AD HOC : DANS CE QUI SUIT ON SUPPOSE QUE LE PROF OU LE SURVEILLANT REPREND LA TOTALITE DU GROUPE INITIAL
	$tab_nom_jour[1]="lundi";
	$tab_nom_jour[2]="mardi";
	$tab_nom_jour[3]="mercredi";
	$tab_nom_jour[4]="jeudi";
	$tab_nom_jour[5]="vendredi";
	$tab_nom_jour[6]="samedi";
	$tab_nom_jour[7]="dimanche";
		
	$msg="";
	// Rechercher les données fondamentales de l'événement
	$tab_eve=get_eve($id);
	
	// Art
	$art=$tab_eve['art'];
	if (substr($art,0,3)!='cso') {die("Erreur d'argument pour l'événement : ".$id);}
	
	// Gdh debut: décalage
	$debut_vrai=$tab_eve['date_debut'];
	$debut=vwda($debut_vrai);
	//$msg.=$debut."<br />";
	
	// Gdh fin: décalage
	$fin_vrai=$tab_eve['date_fin'];
	$fin=vwde($fin_vrai);
	//$msg.=$fin."<br />";
	
	// Prof (unique)
	$tab_prof=mene($id);
	$login_prof=$tab_prof[0];
	//$msg.=$login_prof."<br />";
	
	// Groupe (unique)
	$tab_gr=grpp($id);
	$groupe_unique=$tab_gr[0];
	//$msg.=$groupe_unique."<br />";

	// On suppose que l on ne va pas trouver de pavé en rapport
	$gefunden=False;
	
	// Recherche des pavés pertinents de edt_ics
	$sql="SELECT * FROM edt_ics 
	WHERE id_groupe='".$groupe_unique."' 
	AND date_debut = '".$debut."' 
	AND date_fin = '".$fin."' 
	ORDER BY id_classe
	";
	$exec=sql_query($sql);
	if (!$exec) {die("Erreur à l'exécution de : ".$sql);}
	//$msg.=$sql."<br />";
	$nb_enreg=mysqli_num_rows($exec);
	if ($nb_enreg==0) 
	{

		// DEUXIEME CHANCE : le gdh du haut du cso concorde, le gdh du bas du cso est plus tôt que le gdh du pavé de edt_ics
		// Recherche des pavés pertinents de edt_ics
		$sql="SELECT * FROM edt_ics 
		WHERE id_groupe='".$groupe_unique."' 
		AND date_debut = '".$debut."' 
		AND date_fin > '".$fin."' 
		ORDER BY id_classe
		";
		$exec=sql_query($sql);
		if (!$exec) {die("Erreur à l'exécution de : ".$sql);}
		//$msg.=$sql."<br />";
		$nb_enreg_haut=mysqli_num_rows($exec);
		if ($nb_enreg_haut>0) {
			// Il y a recouvrement partiel des horaires: si effectivement le créneau est libre, typ_cso sera mis à 2.
			$gefunden=True;
			$msg="";
			for ($i=0;$i<$nb_enreg_haut;$i++) {
				// Pour chaque enreg
				
				$enreg=old_mysql_result($exec,$i,'id');
				$msg.="Pavé d'origine trouvé : ".$enreg."<br />";
				$classe_ics=old_mysql_result($exec,$i,'classe_ics');
				// Si on a trouvé un créneau (i.e. des enreg à cause du multiclasse)
				// Donc classe_ics doit commencer par l'une des lettres: q,b,f,a, qui montrent que les élèves sont libres;
				// ou bien il s'agit d'une modification d'un cso et il faut donc la rendre possible, mais vérifier qu'il s'agit bien d'une modification
				$frei=array('q','b','f','a');
				// Modif _16 du 20161117 par P. Aldebert : on autorise aussi s'il n'y a pas d'élèves inscrits (soutien, clubs...)
				//if (in_array(substr($classe_ics,0,1),$frei)) {
				if ((in_array(substr($classe_ics,0,1),$frei))||(!are_pupils($groupe_unique))) {
				// Fin modif
				
					// Acquérir les colonnes du pavé (hors classe_ics déjà acquis
					$id_classe=old_mysql_result($exec,$i,'id_classe');
					$groupe_unique=old_mysql_result($exec,$i,'id_groupe');
					$prof_ics=old_mysql_result($exec,$i,'prof_ics');
					$matiere_ics=old_mysql_result($exec,$i,'matiere_ics');
					$salle_ics=old_mysql_result($exec,$i,'salle_ics');
					$partie_ics=old_mysql_result($exec,$i,'partie_ics');
					$jour_semaine=old_mysql_result($exec,$i,'jour_semaine');
					$num_semaine=old_mysql_result($exec,$i,'num_semaine');
					$annee=old_mysql_result($exec,$i,'annee');
					// On conserve le gdh de fin, mais on va rabaisse le gdh de début pour laisser une place à un nouveau pavé
					// Calcul du nouveau gdh de debut
					$anc_date_debut=old_mysql_result($exec,$i,'date_debut');
					$date_debut=rabaisse_debut($anc_date_debut);
					//$msg.="Nouveau gdh début pour le pavé d'origine : ".$date_debut."<br />";
					$anc_date_fin=old_mysql_result($exec,$i,'date_fin');
					// Champs finaux
					$description=old_mysql_result($exec,$i,'num_semaine');
					$qu=$description=old_mysql_result($exec,$i,'qu');
					
					
					// Stocker la valeur de départ de classe_ics dans edt_ics_base, le reste y est inchangé
					$sql="UPDATE edt_ics_base SET classe_ics='".$classe_ics."' WHERE id='".$enreg."'";
					$update=sql_query($sql);
					if (!$update) {die("Erreur à l'exécution de : ".$sql);}
					
					// Mettre à jour la date_debut pour le pavé d'origine dans edt_ics
					$sql="UPDATE edt_ics SET date_debut='".$date_debut."' WHERE id='".$enreg."'";
					$update=sql_query($sql);
					if (!$update) {die("Erreur à l'exécution de : ".$sql);}
				
					// Créer le pavé cso
					$neu_classe_ics="o;".$id;
					$neu_date_fin=rehausse_fin($anc_date_fin);
					$sql="INSERT into edt_ics SET 
						id_classe='".$id_classe."',
						id_groupe='".$groupe_unique."',
						classe_ics='".$neu_classe_ics."',
						prof_ics='".$prof_ics."',
						matiere_ics='".$matiere_ics."',
						salle_ics='".$salle_ics."',
						partie_ics='".$partie_ics."',
						num_semaine='".$num_semaine."',
						jour_semaine='".$jour_semaine."',
						annee='".$annee."',
						date_debut='".$anc_date_debut."',
						date_fin='".$neu_date_fin."',
						description='".$description."',
						qu='".$qu."'
						";
					$ins=mysqli_query($GLOBALS["mysqli"], $sql);
					if (!$ins) {die("Erreur à l'exécution de : ".$sql);}
					$neu_enreg=mysqli_insert_id($GLOBALS["mysqli"]);
					$msg.="Nouveau pavé créé n° ".$neu_enreg."<br />";
					
					// Puisque tout s'est bien passé, on peut mettre typ_cso à 2
					$sql="UPDATE abs_prof SET typ_cso='2' WHERE id='".$id."'";
					$update=sql_query($sql);
					if (!$update) {die("Erreur à l'exécution de : ".$sql);}
					
				
				} else if (substr($classe_ics,0,1)=='o') {
					// Verifier qu'il s'agit bien de la même cso
					if (substr($classe_ics,2)==$id) {
						// LE CAS D UNE MODIF DE CRENEAU ET / OU DE GROUPE ETANT PROSCRIT, IL N Y A RIEN A FAIRE PUISQUE SEULS LES TEXTES DE abs_prof ou j_eve_profs CHANGENT
					} else {
						$msg="Dans le créneau que vous indiquez, il y a déjà le cours supplémentaire d'opportunité :  ".substr($classe_ics,2).".<br />";
						$msg.="Si c'est pertinent, supprimez-le puis reformulez votre demande.<br />";				
					}
				} else {
					//$msg="Dans le créneau que vous indiquez, les élèves n'ont pas été libérés.<br />".$sql."<br > Supprimez votre demande.<br />";
					$msg="Dans le créneau que vous indiquez, les élèves n'ont pas été libérés.<br />"."<br > Supprimez votre demande.<br />";
					$msg.="Pavé n° : ".$enreg."<br />";
					$msg.="Mention : ".$classe_ics."<br />";
				}							
			}
		}
		
		
		//TROISIEME CHANCE également du même type: le gdh du bas du cso concorde, le gdh du haut du cso est plus tard que le gdh du pavé 
		// Recherche des pavés pertinents de edt_ics
		$sql="SELECT * FROM edt_ics 
		WHERE id_groupe='".$groupe_unique."' 
		AND date_debut < '".$debut."' 
		AND date_fin = '".$fin."' 
		ORDER BY id_classe
		";
		$exec=sql_query($sql);
		if (!$exec) {die("Erreur à l'exécution de : ".$sql);}
		//$msg.=$sql."<br />";
		$nb_enreg_bas=mysqli_num_rows($exec);
		if ($nb_enreg_bas>0) {
			// Il y a recouvrement partiel des horaires: si effectivement le créneau est libre, typ_cso sera mis à 3.
			$gefunden=True;
			$msg="";
			for ($i=0;$i<$nb_enreg_bas;$i++) {
				// Pour chaque enreg
				
				$enreg=old_mysql_result($exec,$i,'id');
				$msg.="Pavé d'origine trouvé : ".$enreg."<br />";
				$classe_ics=old_mysql_result($exec,$i,'classe_ics');
				// Si on a trouvé un créneau (i.e. des enreg à cause du multiclasse)
				// Donc classe_ics doit commencer par l'une des lettres: q,b,f,a, qui montrent que les élèves sont libres;
				// ou bien il s'agit d'une modification d'un cso et il faut donc la rendre possible, mais vérifier qu'il s'agit bien d'une modification
				// Modif _16 du 20161117 par P. Aldebert : on autorise aussi s'il n'y a pas d'élèves inscrits (soutien, clubs...)
				$frei=array('q','b','f','a');
				if ((in_array(substr($classe_ics,0,1),$frei))||(!are_pupils($groupe_unique))){
				// Fin modif
				
					// Acquérir les colonnes du pavé (hors classe_ics déjà acquis)
					$id_classe=old_mysql_result($exec,$i,'id_classe');
					$groupe_unique=old_mysql_result($exec,$i,'id_groupe');
					$prof_ics=old_mysql_result($exec,$i,'prof_ics');
					$matiere_ics=old_mysql_result($exec,$i,'matiere_ics');
					$salle_ics=old_mysql_result($exec,$i,'salle_ics');
					$partie_ics=old_mysql_result($exec,$i,'partie_ics');
					$jour_semaine=old_mysql_result($exec,$i,'jour_semaine');
					$num_semaine=old_mysql_result($exec,$i,'num_semaine');
					$annee=old_mysql_result($exec,$i,'annee');
					// On conserve le gdh de début, mais on va rehausser le gdh de fin
					// Calcul du nouveau gdh de fin
					$anc_date_fin=old_mysql_result($exec,$i,'date_fin');
					$date_fin=rehausse_fin($anc_date_fin);
					//$msg.="Nouveau gdh fin pour le pavé d'origine : ".$date_fin."<br />";
					$anc_date_debut=old_mysql_result($exec,$i,'date_debut');
					// Champs finaux
					$description=old_mysql_result($exec,$i,'num_semaine');
					$qu=$description=old_mysql_result($exec,$i,'qu');
										
					// Stocker la valeur de départ de classe_ics dans edt_ics_base, le reste y est inchangé
					$sql="UPDATE edt_ics_base SET classe_ics='".$classe_ics."' WHERE id='".$enreg."'";
					$update=sql_query($sql);
					if (!$update) {die("Erreur à l'exécution de : ".$sql);}
					
					// Mettre à jour la date_fin pour le pavé d'origine dans edt_ics
					$sql="UPDATE edt_ics SET date_fin='".$date_fin."' WHERE id='".$enreg."'";
					$update=sql_query($sql);
					if (!$update) {die("Erreur à l'exécution de : ".$sql);}
				
					// Créer le pavé cso
					$neu_classe_ics="o;".$id;
					$neu_date_debut=rabaisse_debut($anc_date_debut);
					$sql="INSERT into edt_ics SET 
						id_classe='".$id_classe."',
						id_groupe='".$groupe_unique."',
						classe_ics='".$neu_classe_ics."',
						prof_ics='".$prof_ics."',
						matiere_ics='".$matiere_ics."',
						salle_ics='".$salle_ics."',
						partie_ics='".$partie_ics."',
						num_semaine='".$num_semaine."',
						jour_semaine='".$jour_semaine."',
						annee='".$annee."',
						date_debut='".$neu_date_debut."',
						date_fin='".$anc_date_fin."',
						description='".$description."',
						qu='".$qu."'
						";
					$ins=mysqli_query($GLOBALS["mysqli"], $sql);
					if (!$ins) {die("Erreur à l'exécution de : ".$sql);}
					$neu_enreg=mysqli_insert_id($GLOBALS["mysqli"]);
					$msg.="Nouveau pavé créé n° ".$neu_enreg."<br />";
					
					// Puisque tout s'est bien passé, on peut mettre typ_cso à 3
					$sql="UPDATE abs_prof SET typ_cso='3' WHERE id='".$id."'";
					$update=sql_query($sql);
					if (!$update) {die("Erreur à l'exécution de : ".$sql);}
					
				
				} else if (substr($classe_ics,0,1)=='o') {
					// Verifier qu'il s'agit bien de la même cso
					if (substr($classe_ics,2)==$id) {
						// LE CAS D UNE MODIF DE CRENEAU ET / OU DE GROUPE ETANT PROSCRIT, IL N Y A RIEN A FAIRE PUISQUE SEULS LES TEXTES DE abs_prof ou j_eve_profs CHANGENT
					} else {
						$msg="Dans le créneau que vous indiquez, il y a déjà le cours supplémentaire d'opportunité :  ".substr($classe_ics,2).".<br />";
						$msg.="Si c'est pertinent, supprimez-le puis reformulez votre demande.<br />";				
					}
				} else {
					//$msg="Dans le créneau que vous indiquez, les élèves n'ont pas été libérés.<br />".$sql."<br > Supprimez votre demande.<br />";
					$msg="Dans le créneau que vous indiquez, les élèves devraient être libérés.<br />"."<br > Supprimez votre demande.<br />";
					$msg.="Pavé n° : ".$enreg."<br />";
					$msg.="Mention : ".$classe_ics."<br />";
				}							
			}
		}
		
		// Modif _16 du 20161115 par P.Aldebert :
		// QUATRIEME CHANCE : ces élèves n'ont pas cours et donc le professeur peut "inventer" un créneau nouveau supplémentaire
		
		// Une salle a t-elle été indiquée?
		if($id_salle!=0) {
			$gefunden=True;

			// Regarder si la salle est libre
			// Aller chercher les salles possibles dans edt_ics
			// Rappel : ces salles sont normalisées et sont toutes dans la colonne numero_salle de la table salle_cours
			// On utilise un LIKE à cause des ";"
			// Passer de l'id_salle à numero_salle 
			$numero_salle=get_numero_salle_from_id_salle($id_salle);
			// AD HOC On ne teste pas avec LIKE pour le moment
			$num_like="%".$numero_salle."%";
			// Pouvoir disposer d'inégalités strictes
			$nun_debut=vdwa($debut);
			$nun_fin=vdwe($fin);
			
			// Expression du cas d'interférence
				// Expression du cas d'interférence
			$cas_interference=" ( ( '".$nun_debut."'<ei.date_debut AND  '".$nun_fin."'>ei.date_debut) 
								OR 
								( '".$nun_debut."'>ei.date_debut AND  '".$nun_debut."'<ei.date_fin) )  
			";		
			
			// Compter les pavés pour cette salle , sauf les pavés q,b,f,a 
			$sql="SELECT ei.* FROM edt_ics ei WHERE 
			ei.salle_ics = '".$numero_salle."' AND ".
			$cas_interference. " 
			AND ei.classe_ics NOT LIKE 'q%'
			AND ei.classe_ics NOT LIKE 'b%' 
			AND ei.classe_ics NOT LIKE 'f%'
			AND ei.classe_ics NOT LIKE 'a%'
			";
			$exeb=sql_query($sql);
			if (!$exeb) {die("Erreur à l'exécution de : ".$sql);}
			$nb_d=mysqli_num_rows($exeb);
			if ($nb_d!=0) {
				$msg="Vous avez indiqué la salle ".$numero_salle ." mais elle n'est pas libre : <br />";
				// Rechercher le nom du prof
				$nom_prof=old_mysql_result($exeb,0,'prof_ics');
				$msg.="Elle est occupée par le professeur : ".$nom_prof."<br />Veuillez choisir une autre salle.<br />";		
			} else {
				// La salle est libre
				// Mais les élèves sont-ils disponibles ?
				// Rechercher les élèves occupés
				$sql="SELECT distinct id_groupe FROM edt_ics WHERE  
					date_debut<'".$nun_debut."'AND 
					date_fin>'".$nun_fin."' 
					AND classe_ics NOT LIKE 'q%'
					AND classe_ics NOT LIKE 'b%' 
					AND classe_ics NOT LIKE 'f%'
					AND classe_ics NOT LIKE 'a%'
					";
				$exeg=sql_query($sql);
				if (!$exeg) {die("Erreur à l'exécution de : ".$sql);}
				$nb_g=mysqli_num_rows($exeg);
				// Stocker les élèves occupés
				unset ($tab_sch);
				$tab_sch=array();
				$msg="";
				//$msg="Liste<br />";
				for ($tt=0;$tt<$nb_g;$tt++) {
					$id_g=old_mysql_result($exeg,$tt,'id_groupe');
					//$msg.=$id_g."<br />";
					$sql="SELECT DISTINCT login FROM j_eleves_groupes 
					WHERE id_groupe='".$id_g."'
					AND periode='1'";
					$exeh=sql_query($sql);
					if (!$exeh) {die("Erreur à l'exécution de : ".$sql);}
					$nb_e=mysqli_num_rows($exeh);
					//$msg.=$nb_e."<br />";					
					for ($tv=0;$tv<$nb_e;$tv++) {
						$sch=old_mysql_result($exeh,$tv,'login');
						if (!in_array($sch,$tab_sch)) {
							$tab_sch[]=$sch;
						}
					}
				}
				// Les élèves du groupe font-ils partie des élèves déjà occupés?
				$deja_occ=False;
				$sql="SELECT DISTINCT login FROM j_eleves_groupes 
				WHERE id_groupe='".$groupe_unique."'
				AND periode='1'";
				$exel=sql_query($sql);
				if (!$exel) {die("Erreur à l'exécution de : ".$sql);}
				$nb_p=mysqli_num_rows($exel);
				for ($tx=0;$tx<$nb_p;$tx++) {
					$pup=old_mysql_result($exel,$tx,'login');
					if (in_array($pup,$tab_sch)) {
						$deja_occ=True;
						$msg.="L'élève : ".get_nom_prenom_eleve($pup,'avec_classe')." est déjà en cours à cette heure-là.<br />";
					}
				}
				if ($deja_occ) {
					$msg.="Veuillez supprimer votre demande.<br />";
				} else {
				
					//$msg.="On va pouvoir créer le où les pavés!";
					// Créer le pavé cso
					
					// Carctéristiques communes à tous les pavés
					$neu_classe_ics="o;".$id;
					
					// Un seul prof
					$qu="";
					$prof_ics=prof_ics_from_login($login_prof);
					// Cas où le prof (la surveillante) n'est cité dans aucun emploi du temps
					if ($prof_ics=="") {
						$tab_profs=mene($id);
						$prof_ics=$tab_profs[0];
					}
					
					// Les éléments temporels
					$ts_debut=strtotime($debut);
					$jour_semaine=$tab_nom_jour[strftime("%w", $ts_debut)];
					$num_semaine=semaine_iso($ts_debut);
					$annee=strftime("%Y", $ts_debut);

					// Description
					$description="Remplacement";
					
					// Matière du groupe : on va stocker la famille
					$sql="SELECT DISTINCT m.fam FROM matieres m, j_groupes_matieres jgm WHERE
					jgm.id_groupe='".$groupe_unique."' AND 
					jgm.id_matiere=m.matiere 
					";
					$exen=sql_query($sql);
					if (!$exen) {die("Erreur à l'exécution de : ".$sql);}
					$nb_f=mysqli_num_rows($exen);
					if ($nb_f!=1) {die("Erreur de nombre pour : ".$sql);}
					$matiere_ics=old_mysql_result($exen,0,'m.fam');
					
					// Partie_ics : texte entre crochets dans la description du groupe
					$sql="SELECT description FROM groupes WHERE id='".$groupe_unique."'";
					$exep=sql_query($sql);
					if (!$exep) {die("Erreur à l'exécution de : ".$sql);}
					$nb_s=mysqli_num_rows($exep);
					if ($nb_s!=1) {die("Erreur de nombre pour : ".$sql);}
					$beschreibung=old_mysql_result($exep,0,'description');
					$partie_ics=entre_crochets($beschreibung);
					
					// Boucler sur les classes
					$sql="SELECT id_classe FROM j_groupes_classes WHERE id_groupe='".$groupe_unique."'";
					$exem=sql_query($sql);
					if (!$exem) {die("Erreur à l'exécution de : ".$sql);}
					$nb_k=mysqli_num_rows($exem);
					
					for ($ty=0;$ty<$nb_k;$ty++) {
						$klasse=old_mysql_result($exem,$ty,'id_classe');
						$sql="INSERT into edt_ics SET 
							id_classe='".$klasse."',
							id_groupe='".$groupe_unique."',
							classe_ics='".$neu_classe_ics."',
							prof_ics='".$prof_ics."',
							matiere_ics='".$matiere_ics."',
							salle_ics='".$numero_salle."',
							partie_ics='".$partie_ics."',
							num_semaine='".$num_semaine."',
							jour_semaine='".$jour_semaine."',
							annee='".$annee."',
							date_debut='".$debut."',
							date_fin='".$fin."',
							description='".$description."',
							qu='".$qu."'
							";
						$ins=mysqli_query($GLOBALS["mysqli"], $sql);
						if (!$ins) {die("Erreur à l'exécution de : ".$sql);}
						$neu_enreg=mysqli_insert_id($GLOBALS["mysqli"]);
						$msg.="Nouveau pavé créé n° ".$neu_enreg."<br />";
					}
					
					// Puisque tout s'est bien passé, on peut mettre typ_cso à 4
					$sql="UPDATE abs_prof SET typ_cso='4' WHERE id='".$id."'";
					$update=sql_query($sql);
					if (!$update) {die("Erreur à l'exécution de : ".$sql);}
					
				}
			}
		}
		
		
		if (!$gefunden) {
			$msg.="Veuillez maintenant saisir une salle.<br />";
			//$msg="Vous avez dû vous tromper de créneau horaire ou ne pas indiquer de groupe ou ne pas indiquer de salle avec votre requête : <br />".$sql."<br />Veuillez vérifier ou compléter votre demande de cours supplémentaire d'opportunité.<br />";
			//$msg="Vous avez dû vous tromper de créneau horaire ou ne pas indiquer de groupe ou ne pas indiquer de salle<br />Veuillez vérifier ou compléter votre demande de cours supplémentaire d'opportunité.<br />";
		}
		
	}
	else 
	{
		$gefunden=True;
		// PREMIERE CHANCE Il y a recouvrement complet des horaires: si effectivement le créneau est libre, typ_cso sera mis à 1.
		$msg="";
		for ($i=0;$i<$nb_enreg;$i++) {
			// Pour chaque enreg
			
			$enreg=old_mysql_result($exec,$i,'id');
			$classe_ics=old_mysql_result($exec,$i,'classe_ics');
			
			// Modif _16 du 20161111 par P. Aldebert : les élèves doivent être libres,
			// donc classe_ics doit commencer par l'une des lettres: q,b,f,a, qui montrent que les élèves sont libres;
			// ou bien il s'agit d'une modification d'un cso et il faut donc la rendre possible, mais vérifier qu'il s'agit bien d'une modification
			$frei=array('q','b','f','a');
			// Modif _16 du 20161117 par P. Aldebert : on autorise aussi s'il n'y a pas d'élèves inscrits (soutien, clubs...)
			//if (in_array(substr($classe_ics,0,1),$frei)) {
			if ((in_array(substr($classe_ics,0,1),$frei))||(!are_pupils($groupe_unique))) {
			// Fin modif
			
				// Mettre la valeur de départ de classe_ics dans edt_ics_base
				$sql="UPDATE edt_ics_base SET classe_ics='".$classe_ics."' WHERE id='".$enreg."'";
				$update=sql_query($sql);
				if (!$update) {die("Erreur à l'exécution de : ".$sql);}
				
				// Mettre à jour classe_ics dans edt_ics
				$neu_classe_ics="o;".$id;
				$sql="UPDATE edt_ics SET classe_ics='".$neu_classe_ics."' WHERE id='".$enreg."'";
				$update=sql_query($sql);
				if (!$update) {die("Erreur à l'exécution de : ".$sql);}
				
				// Puisque tout s'est bien passé, on peut mettre typ_cso à 1
				$sql="UPDATE abs_prof SET typ_cso='1' WHERE id='".$id."'";
				$update=sql_query($sql);
				if (!$update) {die("Erreur à l'exécution de : ".$sql);}
			
			} else if (substr($classe_ics,0,1)=='o') {
				// Verifier qu'il s'agit bien de la même cso
				if (substr($classe_ics,2)==$id) {
					// LE CAS D UNE MODIF DE CRENEAU ET / OU DE GROUPE ETANT PROSCRIT, IL N Y A RIEN A FAIRE PUISQUE SEULS LES TEXTES DE abs_prof ou j_eve_profs CHANGENT
				} else {
					$msg="Dans le créneau que vous indiquez, il y a déjà le cours supplémentaire d'opportunité :  ".substr($classe_ics,2).".<br />";
					$msg.="Si c'est pertinent, supprimez-le puis reformulez votre demande.<br />";				
				}
			} else {
				//$msg="Dans le créneau que vous indiquez, les élèves n'ont pas été libérés.<br />".$sql."<br > Supprimez votre demande.<br />";
				$msg="Dans le créneau que vous indiquez, les élèves auraient dû été libérés.<br />"."<br > Supprimez votre demande.<br />";
				$msg.="Pavé n° : ".$enreg."<br />";
				$msg.="Mention : ".$classe_ics."<br />";
			}
		}
	}
	
	return $msg;
	
}
// Fin modif

// Enlève toute mention dans le champ edt_ics dans les pavés edt
// qu'ils soient directs ou indirects
// $weise : permet de désigner la table à mettre à jour
// $id : numéro d'évènement
function ote_impact_edt($weise,$id) {
	$im=get_impact($weise,$id);
	
	$tafel="";
	if ($weise=="courant") {
		$tafel=" edt_ics ";
	} else if ($weise=="base") {
		$tafel=" edt_ics_base ";
	}
	// Il faut nettoyer tout ce qui porte la mention $id dans la table:
	// Il ne faut pas travailler avec l'impact de la nouvelle définition car on n'est pas sûr de tout atteindre
	$ch="%".$id;
	$sql="UPDATE ".$tafel." SET classe_ics='".""."' WHERE classe_ics LIKE '".$ch."'";
	$update=sql_query($sql);
	if (!$update) {die("Erreur à l'exécution de : ".$sql);}
}
// Fin modif

// Modif _15 du 20160519 par P.Aldebert : il peut y avoir plusieurs meneurs
// Modif _15 du 20160501 par P.Aldebert : ajout de l'impact collatéral
// Modif _15 du 20160427 par P.Aldebert : création
// Pour une instance de cours donné, valorise en heures ou demie_heure perdues son impact
// $weise doit valoir "courant" , si on cherche dans la table edt_ics, ou "base" si on cherche dans la table edt_ics_base
// $id est l'idantifiant de l'absence ou de la conférence ou de la sortie
function get_impact($weise,$id) {

	global $st_wert;
		
	unset ($temp1);
	$temp1=array();	
	
	$tafel="";
	if ($weise=="courant") {
		$tafel=" edt_ics ";
	} else if ($weise=="base") {
		$tafel=" edt_ics_base ";
	}
	
	
	// On va rechercher par l'intermédiaire des groupes des profs:
	// - ainsi on pourra traiter le cas des remplaçants de longue durée, qui ne sont ni dans edt_ics, ni dans edt_ics_base
	// - on évitera de doublonner dans le cas des instances de cours multiclasses
	
	// Recherche du nom du prof ou de la puissance invitante
	$sql0="SELECT * FROM abs_prof WHERE id='".$id."'";
	$exec0=sql_query($sql0);
	if (!$exec0) {die ("Erreur à l'exécution de :".$sql0);}
	if (mysqli_num_rows($exec0)!=1) {die ("Anomalie de nombre pour :".$sql0);}
	// Modif _15 du 20160519 par P.Aldebert : il peut y avoir plusieurs meneurs
	//$login_prof=old_mysql_result($exec0,0,'login_user');
	$meneurs=mene($id);
	for ($i=0;$i<count($meneurs);$i++) {
		$temp1['login_prof'][$i]=$meneurs[$i];
	}
	// Fin modif
	$debut_abs_prof=old_mysql_result($exec0,0,'date_debut');
	$fin_abs_prof =old_mysql_result($exec0,0,'date_fin');
	$alk =old_mysql_result($exec0,0,'titre');
	//var_dump($debut_abs_prof);
	//var_dump($fin_abs_prof);

	// Noter le type d'évènement et sa maturité
	$temp1['art']=old_mysql_result($exec0,0,'art');
	//$temp1['login_prof']=$login_prof;
	$temp1['date_debut']=$debut_abs_prof;
	$temp1['date_fin']=$fin_abs_prof;
	$temp1['alk']=$alk;
	
	// Expression du cas d'interférence
	$cas_interference=" ( ( '".$debut_abs_prof."'<ei.date_debut AND  '".$fin_abs_prof."'>ei.date_debut) 
						OR 
						( '".$debut_abs_prof."'>ei.date_debut AND  '".$debut_abs_prof."'<ei.date_fin) )  
	";
	
	// IMPACT DIRECT
	
	unset ($temp);
	$temp=array();	
	
	// Recherche des instances de cours impactées
	
	// Initialisation pour le cas d'un prof sans groupes ou d'un membre de l'administration
	$h_enseig_tot=0.0;
	$h_eleves_tot=0.0;
	
	// Modif _15 du 20160519 par P.Aldebert : il peut y avoir plusieurs meneurs
	// En plus il faut aussi constituer une recherche commune pour les profs
	// Recherche de tous les groupes de ces profs
	unset ($tab_profs);
	unset ($tab_id_groupe);
	$tab_id_groupe=array();
	$tab_profs=array();
	$ch_groupes="";
	$ch_profs="";
	for ($zw=0;$zw<count($temp1['login_prof']);$zw++) {
		$ch_profs.="'".$temp1['login_prof'][$zw]."'".",";
		$groups=get_groups_for_prof($temp1['login_prof'][$zw]);
		for ($i=0;$i<count($groups);$i++) {
			$tab_id_groupe[]=$groups[$i]['id'];
			$ch_groupes.=$groups[$i]['id'].",";
		}
	}
	// Fin modif
	if (count($tab_id_groupe)>0) {
		$ch_groupes=substr($ch_groupes,0,strlen($ch_groupes)-1);
		$ch_profs=substr($ch_profs,0,strlen($ch_profs)-1);
		
		
		// Il va falloir compter facilement toutes les instances de cours impactées
		$cpt1=0;
		
		// Modif _15 du 20160508 par P.Aldebert : dans le cas de groupes où enseignent plusieurs professeurs, il faut
		// sélectionner uniquement les cours donnés par le prof
		//
		// Des cours du groupe interfèrent-ils avec l'absence du professeur?
		/*
		$sql1="SELECT ei.*, c.classe FROM ".$tafel." ei, classes c
		WHERE ".$cas_interference." 
		AND c.id=ei.id_classe
		AND ei.id_groupe IN (".$ch_groupes.") 
		ORDER BY ei.date_debut, ei.date_fin, ei.id_classe";
		$sql1="SELECT ei.*, c.classe FROM ".$tafel." ei, classes c, edt_ics_prof eip
		WHERE ".$cas_interference." 
		AND c.id=ei.id_classe
		AND ei.prof_ics=eip.prof_ics
		AND eip.login_prof='".$login_prof."' 
		AND ei.id_groupe IN (".$ch_groupes.") 
		ORDER BY ei.date_debut, ei.date_fin, ei.id_classe";
		*/
		//var_dump($ch_profs);
		//var_dump($ch_groupes);
		// Il ne devrait pas y avoir de doublon si les professeurs ont un groupe en commun
		$sql1="SELECT DISTINCT ei.*, c.classe FROM ".$tafel." ei, classes c, edt_ics_prof eip
		WHERE ".$cas_interference." 
		AND c.id=ei.id_classe
		AND ei.prof_ics=eip.prof_ics
		AND eip.login_prof IN (".$ch_profs.")
		AND ei.id_groupe IN (".$ch_groupes.") 
		ORDER BY ei.date_debut, ei.prof_ics, ei.date_fin, ei.id_classe";
		//var_dump($sql1);
		// Fin modif
		$exec1=sql_query($sql1);
		if (!$exec1) {die ("Erreur à l'exécution de :".$sql1);}
		$nb1=mysqli_num_rows($exec1);
		
		// Pour ce groupe, il y a donc $nb1 enreg impactés dans l'intervalle de temps de l'absence
		unset ($tab_date_debut);
		$tab_date_debut=array();
		$prof_prec="";
		if($nb1>0) {
			for ($j=0;$j<$nb1;$j++) {
			
				// DEBOG
				//if($id==163) {
					//$id_datensatz=old_mysql_result($exec1,$j,'ei.id');
					//var_dump($id_datensatz);
				//}
				// FIN DEBOG
				// Pour un professeur donné, dans le cas de groupes multiclasses, on peut avoir
				// plusieurs pavés pour la même instance de cours, un par classe
				$id_groupe_courant=old_mysql_result($exec1,$j,'ei.id_groupe');
				$date_debut_courante=old_mysql_result($exec1,$j,'ei.date_debut');
				$date_fin_courante=old_mysql_result($exec1,$j,'ei.date_fin');
				// Modif _16 du 20161011 par P. Aldebert : compte de la vareiabilité dans la saisie de prof_ics,
				// il faut se baser sur le login pour apprécier le changement de prof
				//$prof_courant=old_mysql_result($exec1,$j,'ei.prof_ics');
				$prof_courant=get_login_prof_from_ics(old_mysql_result($exec1,$j,'ei.prof_ics'));
				// Fin modif

				// AVTM, on va avoir besoin de la période correspondant au pavé
				// On peut prendre n'importe quelle classe, les dates officielles sont les mêmes
				$id_classe=old_mysql_result($exec1,$j,'ei.id_classe');
				include("../lib/periodes.inc.php");
				// Chercher le num periode officiel pour cette date_debut
				// Pour les terminales franco-allemandes, on a pris la précaution de mettre la fin du deuxième trimestre à la fermeture de juillet
				$k=1;
				while ($date_fin_periode[$k]<=$date_debut_courante) {
					$k++;
				}
				$zz=$k;
				//var_dump($zz);
				
				// Modif _15 du 20160522 par P.Aldebert : les conditions de coalescence doivent changer depuis que 
				// des évènements peuvent avoir plusieurs organisateurs
				//if (!is_numeric(array_search($date_debut_courante,$tab_date_debut))) {
				// DEBOG
				/*
				if($id==163) {
				var_dump("spécial");
				var_dump($j);
				var_dump($date_debut_courante);
				var_dump($tab_date_debut);
				var_dump($prof_courant);
				var_dump($prof_prec);
				var_dump("fin spécial");
				}
				*/
				// FIN DEBOG
				if ((!is_numeric(array_search($date_debut_courante,$tab_date_debut)))||($prof_prec!=$prof_courant)) {
				// Fin modif
					// C'est bien une nouvelle instance de cours
					// Si les "date_debut" sont égales, tous les autres valeurs sont égales sauf id, id_classe, prof_ics et peut-être partie_ics, classe_ics et description

					// On stocke dans le tableau associatif les fixes, c'est à dire les données qui dépendent de l'instance de cours,
					// mais ne dépendent pas du pavé de la table edt_ics
					
					$temp[$cpt1]['id_groupe']=$id_groupe_courant;
					$temp[$cpt1]['date_heure_debut']=$date_debut_courante;
					$temp[$cpt1]['date_heure_fin']=$date_fin_courante;
					$matiere_ics_courante=old_mysql_result($exec1,$j,'ei.matiere_ics');
					$temp[$cpt1]['matiere_ics']=$matiere_ics_courante;				
					$temp[$cpt1]['matiere']=get_nom_matiere_gepi_pour_matiere_ics($matiere_ics_courante);
					$temp[$cpt1]['fam']=get_nom_fam_from_ics($matiere_ics_courante);
					$temp[$cpt1]['salle_ics']=old_mysql_result($exec1,$j,'ei.salle_ics');
					$temp[$cpt1]['num_semaine']=old_mysql_result($exec1,$j,'ei.num_semaine');
					$temp[$cpt1]['annee']=old_mysql_result($exec1,$j,'ei.annee');
					$temp[$cpt1]['qu']=old_mysql_result($exec1,$j,'ei.qu');
					
					// Cas particulier de fixe: les heures
					$ts_debut=mysql_date_to_unix_timestamp($date_debut_courante);
					$ts_fin=mysql_date_to_unix_timestamp($date_fin_courante);
					$dauer=$ts_fin-$ts_debut;

					// Valorisation heures enseignement
					$temp[$cpt1]['h_enseig']=$st_wert[$dauer];

					// Valorisation heures-eleves
					// Nombre_d'élèves?
					// Nombre_d'élèves?
					// Il y avait une difficulté quand: 
					// a) l'enseignement est dispensé par groupe ou à la fois par groupe et en salle entière
					// b) l'enseignement n'a qu'un seul id_groupe Gepi
					// Dans ce cas, les lignes ci_dessous compte l'intégralité du groupe
					// Donc on a été obligé de créer des groupes supplémentaires
					// Modif _16 du 20161029 par P.Aldebert : traiter le cas d'un groupe gris EPS
					if (is_gris_eps($id_groupe_courant)) {
						$sql2="SELECT login FROM j_eleves_groupes
						WHERE id_groupe='".$id_groupe_courant."' 
						AND periode='1' 
						";
					} else {
						$sql2="SELECT login FROM j_eleves_groupes
						WHERE id_groupe='".$id_groupe_courant."' 
						AND periode='".$zz."'
						";
					}
					// Fin modif
					$exec2=sql_query($sql2);
					if (!$exec2) {die ("Erreur à l'exécution de :".$sql2);}
					$nb2=mysqli_num_rows($exec2);

					// On en profite pour stocker le login des élèves
					for ($zl=0;$zl<$nb2;$zl++) {
						$temp[$cpt1]['ele'][$zl]=old_mysql_result($exec2,$zl,'login');
					}
					
					// Est-ce que les élèves sont en liberté ou non?
					
					// A FAIRE 
					// TRAITER LE CAS DES LIMITES DE PERIODE EPS (fait le 29/10/2016)
					// DISSOCIER DEUX CAS POUR LES BLOCS DE COURS NON ASSURES
					// a) les élèves sont chez eux et révisent
					// b) les élèves peuvent être admis en "permanence" au LFA
					
					// Les élèves sont en liberté en cas d'absence ou en cas de bloc de cours (à la réserve près ci-dessus)
					
					if ((substr($temp1['art'],0,3)=='abs')||(substr($temp1['art'],0,3)=='ena')){
						$temp[$cpt1]['freiheit']='y';
					} else {
						// Dresser la liste de tous les invités à l'événement
						unset ($tab_login);
						$tab_login=array();
						// L'événement concerne des classes
						if (schar($id)=='c') {
							$sql="SELECT id_classe FROM j_eve_classes WHERE id_eve='".$id."'";
							$exes=sql_query($sql);
							if (!$exes) {die ("Erreur à l'exécution de :".$sql);}
							$nbc=mysqli_num_rows($exes);
							
							// Boucler sur les classes
							for ($zc=0;$zc<$nbc;$zc++) {
								$id_classe=old_mysql_result($exes,$zc,'id_classe');
								$sql="SELECT login FROM j_eleves_classes
									WHERE id_classe='".$id_classe."' 
									AND periode='".$zz."'";
								$exet=sql_query($sql);
								if (!$exet) {die ("Erreur à l'exécution de :".$sql);}
								$nbs=mysqli_num_rows($exet);
								for ($zs=0;$zs<$nbs;$zs++) {
									$tab_login[]=old_mysql_result($exet,$zs,'login');
								}
							}
							
						} else if (schar($id)=='g') {
							$sql="SELECT id_groupe FROM j_eve_groupes WHERE id_eve='".$id."'";
							$exes=sql_query($sql);
							if (!$exes) {die ("Erreur à l'exécution de :".$sql);}
							$nbc=mysqli_num_rows($exes);
							
							// Boucler sur les groupes
							for ($zc=0;$zc<$nbc;$zc++) {
								$id_groupe=old_mysql_result($exes,$zc,'id_groupe');
								// Modif _16 du 20161029 par P. Aldebert : dissocier le cas des groupes gris eps
								if(is_gris_eps($id_groupe)) {
									$sql="SELECT login FROM j_eleves_groupes
										WHERE id_groupe='".$id_groupe."' 
										AND periode='1'";
								} else {
									$sql="SELECT login FROM j_eleves_groupes
										WHERE id_groupe='".$id_groupe."' 
										AND periode='".$zz."'";
								}
								// Fin modif
								$exet=sql_query($sql);
								if (!$exet) {die ("Erreur à l'exécution de :".$sql);}
								$nbs=mysqli_num_rows($exet);
								for ($zs=0;$zs<$nbs;$zs++) {
									$tab_login[]=old_mysql_result($exet,$zs,'login');
								}
							}
						}
						
						//var_dump($tab_login);
						// On compare les membres du groupe courant aux invités
						$bw=0;
						for ($zl=0;$zl<$nb2;$zl++) {
							if(in_array($temp[$cpt1]['ele'][$zl],$tab_login)) {
								$bw++;
							}
						}
						
						// On conclut
						if($bw==0) {
							// Les élèves ne sont pas invités, ils sont libres 
							$temp[$cpt1]['freiheit']='y';
							// DEBOG if($id_groupe_courant==1002) {echo "<br />Le groupe impacté ".$id_groupe_courant." n'est pas invité à l'événement ".$id;}					
						} else if($bw==$nb2) {
							// Les élèves sont invités, ils ne sont pas libres 
							$temp[$cpt1]['freiheit']='n';
							//DEBOG if($id_groupe_courant==1002) {echo "<br />Le groupe impacté ".$id_groupe_courant." est invité à l'événement ".$id;}
						} else {
							// Ce cas peut se produire pour les cours de soutien où les éléves sont en sous-nombre;
							// Ce sont quand même des invités
							$temp[$cpt1]['freiheit']='y';
							//NON !echo "<br />CAS LITIGIEUX : groupe impacté ".$id_groupe_courant." ; événement ".$id. "PREVENIR L'ADMINISTRATEUR";								
						}						
					}
									
					// Maintenant, on stocke les heures x élèves
					$temp[$cpt1]['h_eleves']=$st_wert[$dauer]*$nb2;	
					// Fin des éléments fixes qui ne dépendent que de l'instance de cours
					
					// On stocke les éléments variables qui correspondent au premier pavé de cette nouvelle instance de cours
					$temp[$cpt1]['id_enreg'][]=old_mysql_result($exec1,$j,'ei.id');
					// Modif _16 du 20161011 par P.Aldebert Correction de bogue
					//$temp[$cpt1]['id_classe'][]=$id_classe;
					$temp[$cpt1]['id_classe'][]=old_mysql_result($exec1,$j,'ei.id_classe');
					// Fin modif
					$temp[$cpt1]['prof_ics'][]=old_mysql_result($exec1,$j,'ei.prof_ics');
					$temp[$cpt1]['partie_ics'][]=old_mysql_result($exec1,$j,'ei.partie_ics');
					$temp[$cpt1]['classe_ics'][]=old_mysql_result($exec1,$j,'ei.classe_ics');
					$temp[$cpt1]['description_ics'][]=old_mysql_result($exec1,$j,'ei.description');
					
					// Debog
					/*
					if ($id_groupe_courant==1002) {
						var_dump("je suis une nouvelle instance de cours");
						var_dump($temp[$cpt1]);
					}
					*/
					// Fin debog
					
					
					// Pour la suite de la double boucle
					$tab_date_debut[$cpt1]=$date_debut_courante;
					// Modif _15 du 20160522 par P.Aldebert : les conditions de coalescence doivent changer depuis que 
					// des évènements peuvent avoir plusieurs organisateurs
					$prof_prec=$prof_courant;
					// Fin modif
					$cpt1++;
				
				} else {
					// C'est toujours la même instance de cours, on a un nouveau pavé de la table edt_ics
					// Il faut rechercher où rattacher les données propres au pavé au sein de tpujours la même instance
					// Modif _16 du 20161110 par P.Aldebert : correction de bogue : $ref va donner la première instance de cette heure-là
					// au contraire, il faut donner la dernière instance de cours de cette heure-là
					//$ref=array_search($date_debut_courante,$tab_date_debut);
					$ref=$cpt1-1;
					// Fin modif
					// On stocke les éléments variables qui correspondent à un pavé ultérieur de toujours la même instance de cours
					$temp[$ref]['id_enreg'][]=old_mysql_result($exec1,$j,'ei.id');
					$temp[$ref]['id_classe'][]=old_mysql_result($exec1,$j,'ei.id_classe');
					$temp[$ref]['prof_ics'][]=old_mysql_result($exec1,$j,'ei.prof_ics');
					$temp[$ref]['partie_ics'][]=old_mysql_result($exec1,$j,'ei.partie_ics');
					$temp[$ref]['classe_ics'][]=old_mysql_result($exec1,$j,'ei.classe_ics');
					$temp[$ref]['description_ics'][]=old_mysql_result($exec1,$j,'ei.description');
					
					// Debog
					/*
					if ($id_groupe_courant==1002) {
						var_dump("je ne suis pas une nouvelle instance de cours");
						var_dump($temp[$ref]);
					}
					// Fin debog
					*/
				}
			}
		}
		$temp1['direct']['inst']=$temp;

		// Synthese
		for ($i=0;$i<count($temp);$i++) {
			// Pour les heures en service partagé, on suppose que c'est l'autre professeur qui prend le relais
			if ($temp[$i]['qu']=="") {
				$h_enseig_tot=$h_enseig_tot+$temp[$i]['h_enseig'];
				$h_eleves_tot=$h_eleves_tot+$temp[$i]['h_eleves'];
			}
		}
		
		// Debog
		//var_dump("INSTANCES DIRECTEMENT IMPACTEES");
		//var_dump($temp1['direct']['inst']);
		//var_dump ("********************************************************************************************************************");
		// Fin debog
		
	}
	// Fin du cas où il y a des groupes pour les profs

	$temp1['direct']['h_enseig_tot']=$h_enseig_tot;
	$temp1['direct']['h_eleves_tot']=$h_eleves_tot;
		
		
	// Initialisation pour le cas de l'absence d'un prof, où il n'y a pas de dommage collatéral
	
	$h_enseig_tot=0.0;
	$h_eleves_tot=0.0;
	
	// Modif _15 du 20160602 par P.Aldebert : ajouter les enseignements non assurés
	// Modif _15 du 20160510 par P.Aldebert : ajouter les voyages et les sorties
	// Seulement les conférences
	// schar($is)!='n' nous garantit que soit l'événement est associé à des groupes, soit l'événement est associé à des classes
	//if (substr($temp1['art'],0,4)=='conf') {
	if ((((substr($temp1['art'],0,3)=='cnf')||(substr($temp1['art'],0,3)=='sor')||(substr($temp1['art'],0,3)=='voy')||(substr($temp1['art'],0,3)=='ena')))&&
	(schar($id)!='n'))
	{
		// Fin modifs

		// IMPACT COLLATERAL DANS LE CAS DE CLASSES OU DE GROUPES INVITE(E)S A CONFERENCE, SORTIE, VOYAGE
		
		unset ($temp);
		$temp=array();
		
		// Pour ne pas compter deux fois un pavé de cours déjà repérée dans l'impact direct
		$liste_enr_direct="";
		$cpt2=0;
		
		// On ne procède à la recherche des instances de cours impactées en direct que s'il y en a 
		if (isset($temp1['direct']['inst'])) {
			for ($yy=0;$yy<count($temp1['direct']['inst']);$yy++) {
				$aux=count($temp1['direct']['inst'][$yy]['id_enreg']);		
				for ($yz=0;$yz<$aux;$yz++) {
					$cpt2++;
					$liste_enr_direct.=$temp1['direct']['inst'][$yy]['id_enreg'][$yz].",";
				}	
			}
		}
				
		// Retirer la dernière virgule si la chaîne n'est pas vide; fabriquer la clause NOT IN
		if ($cpt2!=0) {
			$liste_enr_direct=substr($liste_enr_direct,0,strlen($liste_enr_direct)-1);
			$not_in=" AND ei.id NOT IN(".$liste_enr_direct.") ";
		} else {
			$not_in="";
		}
		//var_dump($not_in);
				
		$cpt3=0;
		
		// Modif _15 du 20160527 par P.Aldebert : restriction au cas classe
		
		if (schar($id)=='c') {		
			// Des cours des classes interfèrent-ils avec l'évènement?
			$sql3="SELECT DISTINCT ei.* FROM ".$tafel." ei, j_eve_classes jvc
			WHERE ".$cas_interference." 
			AND ei.id_classe=jvc.id_classe
			AND jvc.id_eve='".$id."' 
			".$not_in."
			ORDER BY ei.id_groupe, ei.date_debut, ei.date_fin, ei.id_classe";
		}
		else if (schar($id)=='g') {
			// AVTM, on va avoir besoin de la période correspondant au pavé
			// On peut prendre n'importe quelle classe, les dates officielles sont les mêmes
			$sql8="SELECT jvg.id_groupe FROM j_eve_groupes jvg, groupes g
			WHERE g.id=jvg.id_groupe 
			AND jvg.id_eve='".$id."' 
			";
			$exec8=sql_query($sql8);
			// On est sûr qu'il y a au moins un groupe sinon on n'en serait pas là
			$un_groupe=old_mysql_result($exec8,0,'jvg.id_groupe');
			$sqll="SELECT id_classe FROM j_groupes_classes WHERE id_groupe='".$un_groupe."'";
			$execc=sql_query($sqll);
			if (!$execc) {die ("Erreur à l'exécution de :".$sqll);}
			$nbb=mysqli_num_rows($execc);
			if($nbb==0) {die ("Erreur de nombre pour :".$sqll);}
			
			$id_classe=old_mysql_result($execc,0,'id_classe');
			include("../lib/periodes.inc.php");
			// Pour les terminales franco-allemandes, on a pris la précaution de mettre la fin du deuxième trimestre à la fermeture de juillet
			// Chercher le num periode officiel pour cette date_debut
			$ze=1;
			while ($date_fin_periode[$ze]<=$date_debut_courante) {
				$ze++;
			}
			$za=$ze;
			// Prenons les élèves membres des groupes désignés dans j_eve_groupes
			$sqlx="SELECT DISTINCT jeg.login FROM j_eleves_groupes jeg, j_eve_groupes jvg 
			WHERE jvg.id_groupe=jeg.id_groupe 
			AND jeg.periode='".$za."' 
			AND jvg.id_eve='".$id."' 
			ORDER BY jeg.id_groupe, jeg.login
			";
			//var_dump($sqlx);
			$execx=sql_query($sqlx);
			if (!$execx) {die ("Erreur à l'exécution de :".$sqlx);}
			$nbx=mysqli_num_rows($execx);
			//var_dump($nbx);
			if($nbx==0) {die ("Erreur de nombre pour :".$sqlx);}
			$chs="";
			for ($zb=0;$zb<$nbx;$zb++){
				$chs.="'".old_mysql_result($execx,$zb,'jeg.login')."',";
			}
			// Retirer la dernière virgule (la chaîne n'est pas vide); fabriquer la clause IN
			$chs=substr($chs,0,strlen($chs)-1);
			$dans=" AND jeg.login IN (".$chs." )";
			//var_dump($dans);
			
			// Recenser les groupes auxquels on s'intéresse
			$sqlt="SELECT DISTINCT jeg.id_groupe FROM j_eleves_groupes jeg 
			WHERE jeg.periode='".$za."'"
			.$dans." 
			ORDER BY jeg.id_groupe";
			//var_dump($sqlt);
			$exect=sql_query($sqlt);
			if (!$exect) {die ("Erreur à l'exécution de :".$sqlt);}
			$nbt=mysqli_num_rows($exect);
			if($nbt==0) {die ("Erreur de nombre pour :".$sqlt);}
			
			// Fabriquer la chaîne correspondante
			$chg="";
			for ($zc=0;$zc<$nbt;$zc++){
				$chg.=old_mysql_result($exect,$zc,'jeg.id_groupe').",";
			}
			// Retirer la dernière virgule (la chaîne n'est pas vide); fabriquer la clause IN
			$chg=substr($chg,0,strlen($chg)-1);
			$in=" AND ei.id_groupe IN (".$chg." )";						
			$sql3="SELECT DISTINCT ei.* FROM ".$tafel." ei, j_eve_groupes jvg
			WHERE ".$cas_interference." 
			AND jvg.id_eve='".$id."' 
			".$not_in.$in."
			ORDER BY ei.id_groupe, ei.date_debut, ei.date_fin, ei.id_classe";
		}
			
		$exec3=sql_query($sql3);
		//var_dump($sql3);
		if (!$exec3) {die ("Erreur à l'exécution de :".$sql3);}
		$nb3=mysqli_num_rows($exec3);
		//var_dump($nb3);
		
		// Il faut pouvoir détecter les changements de groupe pour pouvoir appliquer le même raisonnement que dans le cas du prof absent
		$id_groupe_prec=0;
		
		// Boucler sur les pavés
		if($nb3>0) {
			for ($j=0;$j<$nb3;$j++) {

				// Dans le cas de groupes multiclasses, pour un même prof on peut avoir plusieurs pavés pour la même instance de cours, un par classe
				$date_debut_courante=old_mysql_result($exec3,$j,'ei.date_debut');
				$date_fin_courante=old_mysql_result($exec3,$j,'ei.date_fin');
				$id_groupe_courant=old_mysql_result($exec3,$j,'ei.id_groupe');
				if ($id_groupe_courant!=$id_groupe_prec) {
					unset ($tab_date_debut);
					$tab_date_debut=array();
				}

				// AVTM, on va avoir besoin de la période correspondant au pavé
				// On peut prendre n'importe quelle classe, les dates officielles sont les mêmes
				$id_classe=old_mysql_result($exec3,$j,'ei.id_classe');
				include("../lib/periodes.inc.php");
				// Pour les terminales franco-allemandes, on a pris la précaution de mettre la fin du deuxième trimestre à la fermeture de juillet
				// Chercher le num periode officiel pour cette date_debut
				$k=1;
				// Modif _16 du 20170124 par P.Aldebert : AD HOC jamais plus de 3 périodes 
				//while ($date_fin_periode[$k]<=$date_debut_courante) {
				while (($date_fin_periode[$k]<=$date_debut_courante)&&($k<3)) {
				// Fin modif
					$k++;
				}
				$zz=$k;
				//var_dump($zz);

				if (!is_numeric(array_search($date_debut_courante,$tab_date_debut))) {

					// C'est bien une nouvelle instance de cours
					// Si les "date_debut" sont égales, tous les autres valeurs sont égales sauf id, id_classe, prof_ics et peut-être partie_ics, classe_ics et description
					// Les fixes
					$temp[$cpt3]['id_groupe']=$id_groupe_courant;
					$temp[$cpt3]['date_heure_debut']=$date_debut_courante;
					$temp[$cpt3]['date_heure_fin']=$date_fin_courante;
					$matiere_ics_courante=old_mysql_result($exec3,$j,'ei.matiere_ics');
					$temp[$cpt3]['matiere_ics']=$matiere_ics_courante;				
					$temp[$cpt3]['matiere']=get_nom_matiere_gepi_pour_matiere_ics($matiere_ics_courante);
					$temp[$cpt3]['fam']=get_nom_fam_from_ics($matiere_ics_courante);
					$temp[$cpt3]['salle_ics']=old_mysql_result($exec3,$j,'ei.salle_ics');
					$temp[$cpt3]['num_semaine']=old_mysql_result($exec3,$j,'ei.num_semaine');
					$temp[$cpt3]['annee']=old_mysql_result($exec3,$j,'ei.annee');
					$temp[$cpt3]['qu']=old_mysql_result($exec3,$j,'ei.qu');
					
					// Cas particulier de fixe: les heures
					$ts_debut=mysql_date_to_unix_timestamp($date_debut_courante);
					$ts_fin=mysql_date_to_unix_timestamp($date_fin_courante);
					$dauer=$ts_fin-$ts_debut;

					// Valorisation heures enseignement
					$temp[$cpt3]['h_enseig']=$st_wert[$dauer];
					// Valorisation heures-eleves

					// Nombre_d'élèves?
					// Il y avait une difficulté quand: 
					// a) l'enseignement est dispensé par groupe ou à la fois par groupe et en salle entière
					// b) l'enseignement n'a qu'un seul id_groupe Gepi
					// Dans ce cas, les lignes ci_dessous compte l'intégralité du groupe 
					// Donc on a été obligé de créer des groupes supplémentaires hors bulletin
					// Modif _15 du 20160528 par P.Aldebert : dans le cas de scharg, seuls certains élèves du groupes sont présents
					if (schar($id)=='c') {
						$sql2="SELECT distinct jeg.login FROM j_eleves_groupes jeg, j_eleves_classes jec
						WHERE jeg.id_groupe='".$id_groupe_courant."' 
						AND jeg.periode='".$zz."' 
						AND jec.periode=jeg.periode 
						AND jec.login=jeg.login
						ORDER BY jec.id_classe, jeg.login
						";
					} 
					else if (schar($id)=='g') {
						// Il faut piocher exclusivement dans les élèves présents à la sortie
						// Modif _16 du 20161029 par P.Aldebert : traiter le cas des groupes gris EPS
						if (is_gris_eps($id_groupe_courant)) {
							$sql2="SELECT distinct jeg.login FROM j_eleves_groupes jeg, j_eleves_classes jec
							WHERE jeg.id_groupe='".$id_groupe_courant."' 
							AND jeg.periode='1' 
							AND jec.periode=jeg.periode 
							AND jec.login=jeg.login "
							.$dans.
							" ORDER BY jec.id_classe, jeg.login
							";
						} else {
							$sql2="SELECT distinct jeg.login FROM j_eleves_groupes jeg, j_eleves_classes jec
							WHERE jeg.id_groupe='".$id_groupe_courant."' 
							AND jeg.periode='".$zz."' 
							AND jec.periode=jeg.periode 
							AND jec.login=jeg.login "
							.$dans.
							" ORDER BY jec.id_classe, jeg.login
							";
						}
						// Fin modif
					}
					// Fin modif
					$exec2=sql_query($sql2);
					if (!$exec2) {die ("Erreur à l'exécution de :".$sql2);}
					$nb2=mysqli_num_rows($exec2);					
					// On en profite pour stocker le login des élèves
					for ($zl=0;$zl<$nb2;$zl++) {
						$temp[$cpt3]['ele'][$zl]=old_mysql_result($exec2,$zl,'login');
					}
					
					// On effectue la multiplication
					$temp[$cpt3]['h_eleves']=$st_wert[$dauer]*$nb2;				
					
					
					// Les variables
					$temp[$cpt3]['id_enreg'][]=old_mysql_result($exec3,$j,'ei.id');
					$temp[$cpt3]['id_classe'][]=$id_classe;
					$temp[$cpt3]['prof_ics'][]=old_mysql_result($exec3,$j,'ei.prof_ics');
					$temp[$cpt3]['partie_ics'][]=old_mysql_result($exec3,$j,'ei.partie_ics');
					$temp[$cpt3]['classe_ics'][]=old_mysql_result($exec3,$j,'ei.classe_ics');
					$temp[$cpt3]['description_ics'][]=old_mysql_result($exec3,$j,'ei.description');
					
					// Pour la suite de la double boucle
					$tab_date_debut[$cpt3]=$date_debut_courante;
					$cpt3++;
				
				} else {
					$ref=array_search($date_debut_courante,$tab_date_debut);
					// Les variables
					$temp[$ref]['id_enreg'][]=old_mysql_result($exec3,$j,'ei.id');
					$temp[$ref]['id_classe'][]=old_mysql_result($exec3,$j,'ei.id_classe');
					$temp[$ref]['prof_ics'][]=old_mysql_result($exec3,$j,'ei.prof_ics');
					$temp[$ref]['partie_ics'][]=old_mysql_result($exec3,$j,'ei.partie_ics');
					$temp[$ref]['classe_ics'][]=old_mysql_result($exec3,$j,'ei.classe_ics');
					$temp[$ref]['description_ics'][]=old_mysql_result($exec3,$j,'ei.description');
				}
				// Il faut pouvoir noter quand on change de groupe
				$id_groupe_prec=$id_groupe_courant;
			}
		}
		$temp1['collat']['inst']=$temp;
		
		// Synthese
		for ($i=0;$i<count($temp);$i++) {
			// Pour les heures en service partagé, on suppose que c'est l'autre professeur qui prend le relais
			if ($temp[$i]['qu']=="") {
				$h_enseig_tot=$h_enseig_tot+$temp[$i]['h_enseig'];
				$h_eleves_tot=$h_eleves_tot+$temp[$i]['h_eleves'];
			}
		}
		
		// Fin du calcul de l'impact collatéral pour le cas des conférences, sorties, voyages
	}

	$temp1['collat']['h_enseig_tot']=$h_enseig_tot;
	$temp1['collat']['h_eleves_tot']=$h_eleves_tot;

	
	// Retour FINAL
		
	return $temp1;
}

// Modif _15 du 20160425 par P.Aldebert : création
// Pour une instance de cours donné, valorise en heures ou demie heure sa durée
//$weise vaut "courant" , si on cherche dans la table edt_ics ou "base" si on cherche dans la table edt_ics_base
//$id est l'idantifiant de l'instance de cours
function val_tranche($weise,$id) {

	global $st_wert;
	
	if($weise=='courant') {
		$sql ="SELECT * FROM edt_ics WHERE id='".$id."'";	
	} else {
		$sql ="SELECT * FROM edt_ics_base WHERE id='".$id."'";	
	}
	$exec=sql_query($sql);
	if (!$exec) {die ("Erreur à l'exécution de :".$sql);}
	if (mysqli_num_rows($exec)!=1) {die ("Anomalie de nombre pour :".$sql);}
	$date_debut=old_mysql_result($exec,0,'date_debut');
	$date_fin=old_mysql_result($exec,0,'date_fin');
	$ts_debut=mysql_date_to_unix_timestamp($date_debut);
	$ts_fin=mysql_date_to_unix_timestamp($date_fin);

	$dauer=$ts_fin-$ts_debut;
	$eq_ad=$st_wert[$dauer];
	
	return $eq_ad;

}

// Modif _16 du 20161214 par P.Aldebert
// coupe en deux tous les pavés éligibles d'une ou des journées où se produit un événement donné
// En entrée : $id_eve
function scie($id_eve) {
	// Par défaut, parce qu'on est en mode arrêt et non pas en mode message
	$msg="ok";
	
	// noms des jours en français
	unset ($tab_nom_jour);
	$tab_nom_jour=array();
	$tab_nom_jour[1]="lundi";
	$tab_nom_jour[2]="mardi";
	$tab_nom_jour[3]="mercredi";
	$tab_nom_jour[4]="jeudi";
	$tab_nom_jour[5]="vendredi";
	$tab_nom_jour[6]="samedi";
	$tab_nom_jour[7]="dimanche";

	$tab_eve=get_eve($id_eve);
	$debut=$tab_eve['date_debut'];
	$fin=$tab_eve['date_fin'];

	$debut_zero=substr($debut,0,11)."00:00:00";
	//var_dump($debut_zero);
	$fin_zero=substr($fin,0,11)."00:00:00";
	//var_dump($fin_zero);

	$ts_debut_zero=strtotime($debut_zero);
	$ts_fin_zero=strtotime($fin_zero);

	$incr=86400;

	// Boucler sur les jours
	for ($ts=$ts_debut_zero;$ts<=$ts_fin_zero;$ts=$ts+$incr) {
		$num_jour=strftime('%w',$ts);
		// Modif _16 du 20170124 par P.Aldebert : pour éviter un bogue, remplacer 0 par 7;
		// cela ne prête pas à conséquence car il n'y a pas de cours le dimanche, quand bien même le numéro de semaine serait faux
		// Cela peut se produire si un événement (de type ena8 par exemple) chevauche un week end
		if($num_jour==0) {$num_jour=7;}
		// Fin modif
		$jour_semaine=$tab_nom_jour[$num_jour];
		$num_semaine=semaine_iso($ts);
		
		// Rechercher tous les enregistrements de ce jour-là
		$sql="SELECT DISTINCT id FROM edt_ics WHERE 
		jour_semaine='".$jour_semaine."' AND 
		num_semaine='".$num_semaine."'
		ORDER BY id DESC ";
		$exec=sql_query($sql);
		if(!$exec) {die("Erreur à l'exécution de ".$sql);}
		$nb=mysqli_num_rows($exec);
		for ($j=0;$j<$nb;$j++) {
			$id_enreg=old_mysql_result($exec,$j,'id');
			//var_dump($id_enreg);
			if(elig_separ($id_enreg)) {
				$msg=separ_pav_unique($id_enreg);
			}
		}
	}
	
	return $msg;
}
// Fin modif

function get_days_from_week_number($num_semaine ,$annee) {
	$tab=array();

	for($num_jour=1; $num_jour<=7; $num_jour++) {
		$ts=strtotime($annee."W".$num_semaine.$num_jour);
		$tab['num_jour'][$num_jour]['nom_jour']=strftime("%A", $ts);
		$tab['num_jour'][$num_jour]['timestamp']=$ts;
		$tab['num_jour'][$num_jour]['jj']=date('d', $ts);
		$tab['num_jour'][$num_jour]['mm']=date('m', $ts);
		$tab['num_jour'][$num_jour]['aaaa']=date('Y', $ts);
		$tab['num_jour'][$num_jour]['jjmmaaaa']=date('d/m/Y', $ts);
	}

	return $tab;
}

function get_dernier_dimanche_du_mois($mois, $annee) {
	// Fonction utilisée pour les mois de mars et octobre (31 jours)
	for($i=31;$i>1;$i--) {
		$ts=mktime(0, 0, 0, $mois , $i, $annee);
		// Modif _15 du 20151219 par P.Aldebert : strftime ne marche pas avec %u, utilisons %w
		//if(strftime("%u", $ts)==7) {
		if(strftime("%w", $ts)==0) {
		// Fin modif
			break;
		}
	}
	return $i;
}

// Modif _15 du 20160421 par P.Aldebert: ajout
function get_login_prof_from_ics($prof_ics) {
	$retour="";

	$sql="SELECT login_prof FROM edt_ics_prof WHERE prof_ics='$prof_ics';";
	//$html.="$sql<br />";
	$res=mysqli_query($GLOBALS["mysqli"], $sql);
	if(mysqli_num_rows($res)>0) {
		$lig=mysqli_fetch_object($res);
		$retour=$lig->login_prof;
	}

	return $retour;
}

function get_nom_fam_from_ics($matiere_ics) {
	$retour="";

	$sql="SELECT m.fam FROM edt_ics_matiere eim, matieres m 
	WHERE eim.matiere_ics='$matiere_ics'
	AND m.nom_vertical=eim.matiere;";
	//$html.="$sql<br />";
	$res=mysqli_query($GLOBALS["mysqli"], $sql);
	if(mysqli_num_rows($res)>0) {
		$lig=mysqli_fetch_object($res);
		$retour=$lig->fam;
	}
	
	return $retour;
}
// Fin modif

function get_nom_matiere_gepi_pour_matiere_ics($matiere_ics) {
	$retour=$matiere_ics;

	$sql="SELECT matiere FROM edt_ics_matiere WHERE matiere_ics='$matiere_ics';";
	//$html.="$sql<br />";
	$res=mysqli_query($GLOBALS["mysqli"], $sql);
	if(mysqli_num_rows($res)>0) {
		$lig=mysqli_fetch_object($res);
		$retour=$lig->matiere;
	}

	return $retour;
}

function get_tab_matiere_gepi_pour_matiere_ics($matiere_ics) {
	$retour['matiere']=$matiere_ics;
	$retour['nom_complet']=$matiere_ics;
	$retour['association_faite']="n";

	$sql="SELECT m.* FROM matieres m, edt_ics_matiere eim WHERE eim.matiere_ics='$matiere_ics' AND eim.matiere=m.matiere;";
	//$html.="$sql<br />";
	$res=mysqli_query($GLOBALS["mysqli"], $sql);
	if(mysqli_num_rows($res)>0) {
		$lig=mysqli_fetch_object($res);
		$retour['matiere']=$lig->matiere;
		$retour['nom_complet']=$lig->nom_complet;
		$retour['association_faite']="y";
	}

	return $retour;
}

function get_nom_prof_gepi_pour_prof_ics($prof_ics) {
	$retour=$prof_ics;

	$sql="SELECT u.civilite, u.nom, u.prenom FROM utilisateurs u, edt_ics_prof eip WHERE eip.prof_ics='$prof_ics' AND eip.login=u.login;";
	//$html.="$sql<br />";
	$res=mysqli_query($GLOBALS["mysqli"], $sql);
	if(mysqli_num_rows($res)>0) {
		$lig=mysqli_fetch_object($res);
		$retour=$lig->nom;
	}

	return $retour;
}

function get_tab_prof_gepi_pour_prof_ics($prof_ics) {
	global $debug_edt;

	$retour['nom']=$prof_ics;
	$retour['designation']=$prof_ics;

	$sql="SELECT u.civilite, u.nom, u.prenom FROM utilisateurs u, edt_ics_prof eip WHERE eip.prof_ics='$prof_ics' AND eip.login_prof=u.login;";
	//$html.="$sql<br />";
	$res=mysqli_query($GLOBALS["mysqli"], $sql);
	if(mysqli_num_rows($res)>0) {
		$lig=mysqli_fetch_object($res);
		$retour['nom']=$lig->nom;
		$retour['prenom']=$lig->prenom;
		$retour['civilite']=$lig->civilite;
		$retour['designation']=casse_mot($lig->civilite." ".$lig->nom." ".mb_substr($lig->prenom,0,1),'maj');
	}

	if($debug_edt=="y") {
		echo "<pre>";
		print_r($retour);
		echo "</pre>";
	}

	return $retour;
}
function get_couleur_edt_matiere($weise,$matiere) {
	global $tab_couleur_edt;
	global $bv;
	//$retour="white";
	// Modif 15 du 20160423 par P. Aldebert : la couleur de fond par défaut dépend du type d'emploi du temps: courant ou de base ($weise)
	if ($weise=='courant') {
		$retour=$bv['n'];
	} else {
		$retour=$bv['r'];
	}
	// Fin modif

	$sql="SELECT valeur FROM edt_setting WHERE reglage='M_".$matiere."';";
	//echo "$sql<br />";
	$res=mysqli_query($GLOBALS["mysqli"], $sql);
	if(mysqli_num_rows($res)>0) {
		$lig=mysqli_fetch_object($res);
		//echo "\$tab_couleur_edt[".$lig->valeur."]=".$tab_couleur_edt[$lig->valeur]."<br />";
		if(isset($tab_couleur_edt[$lig->valeur])) {
			$retour=$tab_couleur_edt[$lig->valeur];
		}
	}
	return $retour;
}

function check_pas_de_collision($x1, $y1, $x2, $y2) {
	global $tab_coord_prises;
	$retour=true;

	// A VOIR : Si on a des problèmes de collisions mal identifiées,
	//          on peut peut-être jouer sur $marge_secu pour réduire les dimensions à droite et en bas lors des tests.
	//          Si il se produit alors un chevauchement, il ne sera que léger,
	//          limité à $marge_secu
	for($loop=0;$loop<count($tab_coord_prises);$loop++) {
		$tab=explode(",", $tab_coord_prises[$loop]);
		$x1b=$tab[0];
		$y1b=$tab[1];
		$x2b=$tab[2];
		$y2b=$tab[3];

		if(($x1<=$x1b)&&($x2>$x1b)) {
			if(($y1b>=$y1)&&($y1b<=$y2)) {
				$retour=false;
			}
			elseif(($y1>=$y1b)&&($y1<=$y2b)) {
				$retour=false;
			}
		}
		elseif(($x1>=$x1b)&&($x1<$x2b)) {
			if(($y1b>=$y1)&&($y1b<=$y2)) {
				$retour=false;
			}
			elseif(($y1>=$y1b)&&($y1<=$y2b)) {
				$retour=false;
			}
		}
	}

	return $retour;
}

function acces_depos_message() {
	// A REVOIR EN GERANT PLUS FINEMENT LES DROITS (pouvoir uploader un fichier ICAL sans pouvoir déposer de message)
	// On se contente pour le moment du filtrage préalable EdtIcalUploadScolarite, EdtIcalUploadCpe
	if($_SESSION['statut']=="administrateur") {
		return true;
	}
	elseif($_SESSION['statut']=="scolarite") {
		return true;
	}
	elseif($_SESSION['statut']=="cpe") {
		return true;
	}
	else {
		return false;
	}
}


function check_ts_vacances($ts, $id_classe) {
	$jour_courant=strftime("%Y-%m-%d", $ts);
	$heure_courante=strftime("%H:%M:%S", $ts);

	$sql="SELECT * FROM edt_calendrier WHERE etabvacances_calendrier!='0' AND 
			(classe_concerne_calendrier LIKE '$id_classe;%' OR classe_concerne_calendrier LIKE '%;$id_classe;%') AND 
			jourdebut_calendrier<='".$jour_courant."' AND 
			heuredebut_calendrier<='".$heure_courante."' AND 
			jourfin_calendrier>='".$jour_courant."' AND 
			heurefin_calendrier>='".$heure_courante."';";
	//echo "$sql<br />";
	$res=mysqli_query($GLOBALS["mysqli"], $sql);
	if(mysqli_num_rows($res)>0) {
		return true;
	}
	else {
		return false;
	}
}

function nom_ts_vacances($ts, $id_classe) {
	$jour_courant=strftime("%Y-%m-%d", $ts);
	$heure_courante=strftime("%H:%M:%S", $ts);

	$sql="SELECT * FROM edt_calendrier WHERE etabvacances_calendrier!='0' AND 
			(classe_concerne_calendrier LIKE '$id_classe;%' OR classe_concerne_calendrier LIKE '%;$id_classe;%') AND 
			jourdebut_calendrier<='".$jour_courant."' AND 
			heuredebut_calendrier<='".$heure_courante."' AND 
			jourfin_calendrier>='".$jour_courant."' AND 
			heurefin_calendrier>='".$heure_courante."';";
	//echo "$sql<br />";
	$res=mysqli_query($GLOBALS["mysqli"], $sql);
	if(mysqli_num_rows($res)>0) {
		$lig=mysqli_fetch_object($res);
		return $lig->nom_calendrier;
	}
	else {
		return "";
	}
}

function DimanchePaques ($annee) {
	//Calcul de la date de Pâques grégorienne en calendrier grégorien (1583-) (Algorithme de Butcher)'
	// $annee=2006;
	
	$n = $annee % 19; // Reste Année / 19
	// return $n ;
	$c = (int)($annee / 100); // Année \ 100
	// return $c ;
	$u = $annee % 100; // Reste Année / 100
	// return $u ;
	$s = (int)($c / 4); // Entier C / 4
	// return $s ;
	$t = $c % 4 ; // reste C / 4
	// return $t ;
	$p = (int)(($c + 8)/25); // Entier (C + 8)/25
	// return $p ;
	$q = (int)(($c-$p+1)/3); // Entier (c - p + 1)/3
	// return $q ;
	$e = (19*$n + $c - $s - $q + 15) % 30; // Reste (19 n + c - s - q + 15) / 30
	// return $e ;
	$b = (int)($u / 4); // entier u/4
	// return $b ;
	$d = $u % 4; // reste u/4
	// return $d ;
	$L = (32 + 2*$t + 2*$b - $e - $d) % 7; // Reste (32 + 2 t + 2 b - e – d)/7
	// return $L ;
	$h = (int)(($n + 11*$e + 22*$L)/451); // Entier (n + 11 e + 22 L)/451
	// return $h ;
	$mois = (int)(($e + $L - 7*$h +114)/31); // Entier (e + L - 7 h +114)/31
	$samedi = ($e + $L - 7*$h +114) % 31; // Reste (e + L - 7 h +114)/31
	$dimanche = mktime(0,0,0,$mois,$samedi+1,$annee);
	return ($dimanche);
}

function LundiPaques ($annee) {
	$lundi = DimanchePaques ($annee) + (24*3600);
	return $lundi ; 
}

function Ascension($annee) {
	$ascension = DimanchePaques ($annee) + (24*3600)*39;
	return $ascension ; 
}

function VendrediAscension($annee) {
	$vendrediAscension = Ascension($annee) + (24*3600);
	return $vendrediAscension ; 
}

function Pentecote($annee) {
	$pentecote = DimanchePaques ($annee) + (24*3600)*50;
	return $pentecote ;
}
function JourSuivant($jour) {
	$jour = $jour + (24*3600);
	return $jour ;
}

?>
